您好我在Java中创建一个应用程序(练习),我必须在我的绘图类中更改变量的颜色。当应用程序启动并且我在颜色变量上运行一个sysout时它会显示为null但是当我按下我的鼠标右键时它会改变控制器类中的颜色而不是我的绘图类中的颜色..有人可以看看并告诉我是什么我做错了?
这是一段代码
这是绘图类的相关部分
private Color color;
private ArrayList<Point> p = new ArrayList<Point>();
public Drawing(Color color) {
this.color = color;
System.out.println("color " + color);
}
public void draw(Graphics g) {
for(int i = 0; i < p.size(); i++) {
g.setColor(color);
g.fillRect(p.get(i).x, p.get(i).y, 10, 10);
}
}
这是我控制器的相关代码。
Color color; // kleur vasthouden
Drawing draw; // class definieren
private ArrayList<Drawing> tekening = new ArrayList<Drawing>();
int x, y;
public DrawingPanel() {
setBackground(Color.WHITE); // zorg voor een witte achtergrond.
this.addMouseListener(this); // control de mouselistener
draw = new Drawing(color);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
draw.draw(g);
}
@Override
public void mouseClicked(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON1) {
Point k = new Point(e.getX(), e.getY());
draw.addPoint(k);
System.out.println("punt gezet op " + k);
}
if(e.getButton() == MouseEvent.BUTTON3) {
color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
System.out.println("new color " + color);
}
repaint();
}
我希望有人能弄清楚我做错了什么..
答案 0 :(得分:2)
您从未在我可以看到的代码中的任何位置实际为color
分配初始值。您只能在发生鼠标事件时进行设置。
if(e.getButton() == MouseEvent.BUTTON3) {
color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
System.out.println("new color " + color);
}
我认为除了打印出这种颜色外,你还想将它设置为Drawing类,然后触发重绘。
答案 1 :(得分:1)
在您的班级Drawing
中添加 setter 方法,并在点击鼠标右键后计算实际颜色:
public void setColor(Color color) {
this.color = color;
}
在控制器中:
if(e.getButton() == MouseEvent.BUTTON3) {
color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
System.out.println("new color " + color);
draw.setColor(color);
}
答案 2 :(得分:0)
由于它们是单独的类,因此每个类中的color
是一个单独的对象。
如果您在Drawing
课程中将color
更改为公开,则可以将color
设置为在控制器中创建的新颜色。
color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
draw.color = color;
您还可以在Drawing类中创建一个setter,并使用它来设置控制器的颜色。
public setColor(Color color) {
this.color = color;
}
此外,将颜色设置为构造函数中的任何值都将使其无法打印为空。
答案 3 :(得分:0)
在你的控制器中,你有一个颜色属性,右键单击,你设置它,但你从来没有在你的Drawing类上设置它。 试试:
if(e.getButton() == MouseEvent.BUTTON3) {
color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
draw.setColor(color);