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

时间:2016-02-16 21:03:32

标签: 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);
    }
}

}

1 个答案:

答案 0 :(得分:1)

  

我需要对此进行扩展以添加更多具有要单击的区域的形状

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

在paintComponent()方法中,遍历List并绘制每个形状。

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

查看Custom Painting Approaches中的header("location: http://<serverIPaddress>/fmi/iwp/cgi?dbpath=%2Ffmi%2Fiwp%2Fcgi%3F-db%3D<databasename>%26-startsession&amp;acct=account&amp;name=<username>&amp;password=<password>&amp;login=Login&amp;-authdb"); 示例,了解此方法的示例。该示例仅绘制矩形,但应该让您开始。