Java 摆动绘制多个可点击的形状

Java swing draw multiple click able shapes

我需要制作一个程序来绘制多个 circles/squares,当它们被点击时,颜色会变成另一种随机颜色。我不确定该怎么做。目前,我在 JPanel 上有一个圆圈,当在圆圈边界内单击面板时,它有一个鼠标侦听器来重新绘制(尽管这会创建一个矩形区域来单击,而不是圆形),我需要扩展它以添加更多形状有自己的区域可以点击。任何帮助表示赞赏。谢谢

public class CircleGUI extends JFrame {
int ovalWidth = 100;
int ovalHeight = 100;
int ovalX = 100;
int ovalY = 100;

public CircleGUI() {
    super("Circle GUI");
    this.setSize(500, 500);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    go();
    this.setVisible(true);
}

public void go() {

    CPanel panel = new CPanel();
    Container container = getContentPane();
    container.add(panel);
    panel.addMouseListener(new MouseListener() {

        @Override
        public void mouseClicked(MouseEvent e) {
            int radius = ovalWidth / 2;
            int centerX = ovalX + radius;
            int centerY = ovalY + radius;

            if (((e.getX() >= centerX - radius && e.getX() <= centerX + radius) && e.getX() >= centerX - radius
                    && e.getX() <= centerX + radius)) {
                repaint();
            }

        }

        @Override
        public void mouseEntered(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mousePressed(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

    });

}

public class CPanel extends JPanel {
    public void paint(Graphics g) {
        // random colour
        g.setColor(new Color(Math.round(Math.random()), Math.round(Math.random()), Math.round(Math.random())));
        g.fillOval(ovalX, ovalY, ovalWidth, ovalHeight);
    }
}

}

I need to extend this to add more shapes that have their own area to be clicked

您需要保留一个要绘制的对象列表。该对象将包含形状和颜色等信息。

在您的 paintComponent() 方法中,您遍历列表并绘制每个形状。

然后您将 MouseListener 添加到您的面板。单击鼠标后,您将遍历列表以查找包含生成的点的形状,然后更新该对象的颜色,然后重新绘制面板。

查看 Custom Painting Approaches 中的 Draw On Component 示例,了解此方法的示例。该示例仅绘制矩形,但应该可以帮助您入门。