我正在尝试获得一个以黑色开始的圆圈,以便在拖动时将颜色更改为红色。我被告知我需要更改Circle以使其具有Color属性和位置,并更改更新方法,以便更改Color以及位置。 但我不知道该怎么做。 任何帮助都会被批评,谢谢。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Circle extends JPanel{
private double x;
private double y;
private double r;
Color color;
Graphics g;
private Color Circle;
public Circle(double x, double y, double r, Color color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void draw(Graphics g) {
g.setColor(Color.red);
g.fillOval((int)Math.round(x-r),(int)Math.round(y-r),
(int)Math.round(2.0*r),(int)Math.round(2.0*r));
}
public double distanceTo(double x, double y) {
return (Math.abs(this.x-x) + Math.abs(this.y-y));
}
public void update(double x, double y) {
this.x = x;
this.y = y;
}
}
答案 0 :(得分:2)
g.setColor(Color.red);
请勿对用于绘制圆圈的颜色进行硬编码。相反,你的类可以有setColor(...)和getColor(...)等方法。然后绘画代码将使用:
g.setColor(getColor());
现在,在MouseListner的mousePressed()方法中,您可以使用:
setColor( getDraggingColor );
并且在mouseReleased中你可以使用:
setColor( getForeground() );
因此,您需要在创建类时存储拖动颜色。
此外,由于您在组件上进行自定义绘制,因此应该覆盖面板的paintComponent()方法以绘制圆形。创建draw(...)方法确实可以做任何事情。
答案 1 :(得分:0)
您需要重新绘制组件才能生效。
更新颜色后调用此方法。
this.repaint();