我需要制作一个可以绘制多个圆/正方形的程序,当它们被点击时,颜色会变为另一种随机颜色。我不确定该怎么做。目前我在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);
}
}
}
答案 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&acct=account&name=<username>&password=<password>&login=Login&-authdb");
示例,了解此方法的示例。该示例仅绘制矩形,但应该让您开始。