我创建了一个名为“City”的对象
City city = new City (name, rec, g);
对象的构造函数如下所示:
public City (String name, Rectangle r, Graphics g){
this.name = name;
this.r = r;
this.g = g;
}
通过创建此对象,我还在上传的图片上绘制一个椭圆,并将其颜色设置为蓝色。这是我绘制对象的方式:
g = (Graphics2D) window.lblNewLabel.getGraphics();
g.setColor(Color.BLUE);
g.fillOval(mouseX, mouseY, 15, 15);
我希望以后能够在点击椭圆形本身后改变颜色。 我尝试调用此函数,但它不起作用:
public void isClicked(){
clicked = true;
this.color = Color.RED;
this.g.setColor(Color.PINK);
}
如何更改现有对象的颜色?
答案 0 :(得分:5)
在组件上使用getGraphics()
会导致在组件本身上使用瞬态图形对象。对repaint
的任何后续调用都将删除使用该对象完成的绘画。
通过覆盖paintComponent
方法更改颜色。将Color
变量保存为类成员变量,并使用它来确定方法中的椭圆颜色。
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(savedColor);
g.fillOval(mouseX, mouseY, 15, 15);
}
答案 1 :(得分:3)
不要使用getGraphics()
进行绘画,绘画只是暂时的,并且在下次Swing确定需要重新绘制组件时会丢失。
查看Playing With Shapes了解有关绘画的其他想法。
您可以使用ShapeIcon
来更改图标的颜色。可以在标签的paintComponent()方法中绘制图标。
或者您可以使用使用ShapeIcon的ShapeComponent
。然后,您可以像使用任何其他组件一样将组件添加到标签中。
我希望以后能够在点击椭圆本身后更改颜色
ShapeIcon将添加到JLabel。然后,您只需将MouseListener添加到ShapeComponent的标签即可更改图标的颜色。
答案 2 :(得分:0)
当您使用Graphics
对象绘制对象时,它们将在屏幕上呈现。您不能直接更改它们的颜色,而是在您想要更改图形时随时重新绘制图形。如果要跟踪对象的颜色,则必须将数据存储在某种变量中,并在绘制时使用它。