画圆圈:将代码分成类

2024-03-23

我正在尝试用随机颜色和随机直径绘制圆圈mousePressed事件,但当我尝试稍微组织我的代码“将我的代码分成类”时,我遇到了一些问题。

控制器类

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) {}
}

查看班级

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 class.


首先,问题是你正在调用paintComponents(Graphics g)方法而不是paintComponent(Graphics g) method.

如果您完成了更改,您应该创建一个单独的CircleCircle 的 POJO 类,因为基本 Java API 中唯一可用的 Circle 来自 JavaFX 包。

设置 Circle 类的构造函数后,您可以添加到HashSet更容易。就像这样:circleSet.add(new Circle(e.getX() - d / 2, e.getY() - d / 2, d, new Color(r, g, b)));

另一个问题是Timer您创建的对象永远不会用于任何用途。首先,你应该做一个Timer对象并初始化后,调用start()方法来开始检查圆圈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

画圆圈:将代码分成类 的相关文章

随机推荐