java椭圆按钮_JAVA Swing通过点击创建椭圆

我认为用Java创建一个小程序是很容易的:

我创建一个jframe=>(大小为500500,可见)

我在JFrame中添加了一个mouseListener

当我单击时,我想在此位置创建一个椭圆

所以我所做的:

我创建了一个类循环(jpanel)

每当鼠标监听器注意到我单击了JFrame时,我都会给它添加一个新的圆。(以x和y为参数)

然后发生了令人震惊的事情:

我点击我的JFrame…什么都没发生。

我想:好吧,让我们在创建新的圆后重新绘制…但没发生什么!

只有当我点击windwos的边界并重新绘制它时,它才会“重新绘制”它。

同时,如果我在某个位置单击,然后在另一个位置单击,然后重新绘制框架,那么它只绘制最后一个圆:(它应该同时绘制两个!)

现在我在上千个不同的地方重新喷漆,但没有区别。我也尝试了一些设置不透明等,只是因为我不知道在这一点上做什么!

这里是鼠标测试器:

你可以忽略颜色

public class Aufgabe3 {

public static Circ.CircleColor actualColor = CircleColor.ROT;

// fromone color to another depend on the actual

public static Circ.CircleColor getNextColor(Circ.CircleColor aktuell) {

switch (aktuell) {

case ROT:

return Circ.CircleColor.GRÃN;

case GRÃN:

return Circ.CircleColor.GELB;

case GELB:

return Circ.CircleColor.ROT;

default:

return null;

}

}

public static void main(String[] args) {

JFrame jFrame = new JFrame();

jFrame.setVisible(true);

jFrame.setSize(500, 500);

jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);

// jFrame.add()

// farbenfolge rot,grün,gelb--

jFrame.addMouseListener(new MouseListener() {

@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseClicked(MouseEvent e) {

System.out.println("clicked");

int x = e.getX();

int y = e.getY();

System.out.println("coords:" + x + "|" + y);

Circ circ = new Circ(x, y, actualColor);

circ.repaint();

jFrame.add(circ);

jFrame.repaint();

System.out.println(actualColor);

// actualisation of the next color

actualColor = getNextColor(actualColor);

}

});

}

}

现在是圆圈:

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import javax.swing.JComponent;

import javax.swing.JPanel;

public class Circ extends JComponent {

static public enum CircleColor {

ROT, GRÃN, GELB

};

private int x;

private int y;

private CircleColor circleColor;

public Circ() {

super();

}

public Circ(int x, int y, CircleColor circColor) {

super();

this.x = x;

this.y = y;

this.circleColor = circColor;

System.out.println("new circle created");

setSize(new Dimension(50, 50));

setVisible(true);

setOpaque(true);

}

public Color decodeCircleColor(CircleColor farbe) {

switch (farbe) {

case GRÃN:

return Color.GREEN;

case GELB:

return Color.yellow;

case ROT:

return Color.red;

default:

return null;

}

}

@Override

protected void paintComponent(Graphics g) {

System.out.println("paint");

Graphics2D g2d = (Graphics2D) g;

super.paintComponent(g2d);

g2d.setColor(decodeCircleColor(circleColor));

// g2d.drawOval(x, y, 50, 50);

g2d.fillOval(x, y, 50, 50);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值