Java swing 绘制多个可点击的形状

标签 java swing graphics shapes

我需要制作一个程序来绘制多个圆形/正方形,当单击它们时,颜色会更改为另一种随机颜色。我不确定该怎么做。目前,我在 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 示例有关此方法的示例。该示例仅绘制矩形,但应该可以帮助您入门。

关于Java swing 绘制多个可点击的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442917/

相关文章:

java - GridBagLayout - 向约束添加边距以将组件从中心移动到顶部

performance - 在 2D 游戏的视口(viewport)中有效地检索 Z 排序对象

c++ - OpenGL 输出未正确显示使用图像作为纹理

java - WebService 无法处理没有命名空间前缀的 SOAP 主体的请求

java - JPA 使用 Map<ID, Entity> 而不是 List<Entity>

java - 使用 JRadioButton 进行 Tab 排序

java - 打开第二个 JFrame 并且组件不显示

java - 在 Java 中将二维整数数组显示为图像

java - 将 if else 语句压缩成更短更优雅的代码

java - 找不到适合 show(ActionBar,String) 方法的方法 DialogFragment.show(FragmentTransaction,String) 不适用