我希望能够点击圆圈,它会更改位置并更改圆圈。我不确定如何实现鼠标监听器。
有没有办法将鼠标监听器放在一个新的类中,它会改变x和y的位置,并改变颜色?
class drawCircle extends JPanel{
int x = 70;
int y = 70;
int dx = 0;
int dy = 0;
drawCircle(){
addMouseMotionListener(new MouseMotionAdapter(){
public void mousePressed(MouseEvent e){
x = (int)(Math.random()*getWidth() - 70);
y = (int)(Math.random()*getHeight() - 70);
repaint();
}
});
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
int red = (int)(Math.random()*255);
int blue =(int)(Math.random()*255);
int green = (int)(Math.random()*255);
Color color = new Color(red,blue,green);
g.setColor(color);
g.fillOval(x + dx, y +dy, x + dx, y + dy);
g.drawString(" ", x + dx, y + dy);
}
}
答案 0 :(得分:4)
我会使用“可点击”的东西,例如Ellipse2D对象,因为像所有实现Shape的类一样,它有一个contains(...)
方法,可用于决定是否已点击任何圆圈on,可以通过将paintComponent的Graphics参数转换为Graphics2D然后调用其fill(Shape s)
方法,将Ellipse2D对象传入其中来轻松绘制。
答案 1 :(得分:3)
对于更高级的实施,您可以查看Playing With Shapes。 ShapeComponent
类允许您创建一个可以支持MouseListener的实际组件,因此很容易响应MouseEvents。
您不应该在paintComponent()方法中设置圆的(随机)颜色。只要Swing确定需要重新绘制组件,就会调用paintComponent()方法。因此,颜色可能会在没有任何用户交互的情相反,应该使用setForeground(...)
方法设置圆圈的颜色。然后绘画代码可以使用圆{。{1}}方法。
此外,每当您进行自定义绘制时,您都需要覆盖getForeground()
方法来设置组件的大小,以便它可以与布局管理器一起使用。有关详细信息,请阅读Custom Painting上的Swing教程中的部分。