我正在尝试在 mousePressed
事件上绘制具有随机颜色和随机直径的圆圈,但是当我尝试稍微组织我的代码时遇到了一些问题“将我的代码分成类” .
Controller 类
public class Controller implements MouseListener {
private HashSet<Circle> circleSet = new HashSet<>();
private int r,g,b,d;
@Override
public void mousePressed(MouseEvent e) {
r = new Random().nextInt(256);
g = new Random().nextInt(256);
b = new Random().nextInt(256);
d = 10+new Random().nextInt(100);
circleSet.add(new Circle(e.getX()-d/2,e.getY()-d/2,d,d,new
Color(r,g,b),0,0));
}
public HashSet<Circle> getCircleSet() {
return circleSet;
}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}
查看类(class)
public class View extends JPanel{
Controller controller;
HashSet<Circle> circleHashSet;
public View() {
repaint();
controller = new Controller();
circleHashSet = controller.getCircleSet();
this.addMouseListener(controller);
listen();
System.out.println(circleHashSet.size());
}
public void listen() {
new javax.swing.Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
circleHashSet = controller.getCircleSet();
System.out.println(circleHashSet.size());
}
});
}
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
for (Circle circle:this.circleHashSet) {
paintCircle(g,circle);
}
System.out.println(circleHashSet);
}
public void paintCircle(Graphics graphics, Circle circle) {
graphics.setColor(circle.color);
graphics.fillOval(circle.x,circle.getY(),circle.a,circle.b);
}
circleHashSet
即使我这样做了,它仍然是空的:
//circleHashSet = controller.getCircleSet();
在按下鼠标后,圆被添加到 circleSet
中,但我无法将它们添加到 View
类中。
最佳答案
首先,问题在于您正在调用 paintComponents(Graphics g)
方法而不是 paintComponent(Graphics g)
方法。
如果您完成了更改,您应该为圆创建一个单独的 Circle
POJO 类,因为在基本 Java API 中唯一可用的 Circle 来自 JavaFX 包。
为圆类设置构造函数后,您可以更轻松地添加到HashSet
。像这样:circleSet.add(new Circle(e.getX() - d/2, e.getY() - d/2, d, new Color(r, g, b)));
另一个问题是您创建的Timer
对象从未用于任何用途。首先,你应该创建一个 Timer
对象,在初始化它之后,调用它的 start()
方法开始检查圆圈。
关于java - 画圈 : separation of code into classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49583772/