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
示例,了解此方法的示例。该示例仅绘制矩形,但应该可以帮助您入门。
我需要制作一个程序来绘制多个 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
示例,了解此方法的示例。该示例仅绘制矩形,但应该可以帮助您入门。