1

我创建了一个名为“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);

}

如何更改现有对象的颜色?

4

3 回答 3

6

在组件上使用getGraphics()会导致在组件本身上使用瞬态图形对象。任何后续调用都repaint将擦除使用该对象完成的绘画。

通过覆盖paintComponent方法更改颜色。将该变量保存Color为类成员变量,并使用它来确定方法中的椭圆颜色。

@Override
protected void paintComponent(Graphics g) {
   super.paintComponent(g);
   g.setColor(savedColor);
   g.fillOval(mouseX, mouseY, 15, 15);
}
于 2013-08-11T15:53:27.073 回答
3

不要getGraphics()用来做涂装,那种涂装只是暂时的,下次 Swing 确定某个组件需要重新涂装时就会丢失。

查看Playing With Shapes了解有关绘画的其他想法。

您可以使用ShapeIcon允许您更改图标颜色的 a 。可以在标签的 paintComponent() 方法中绘制图标。

或者您可以使用ShapeComponent使用 ShapeIcon 的哪个。然后,您可以像任何其他组件一样将组件添加到标签中。

在单击椭圆形本身后,我希望稍后能够更改该颜色

ShapeIcon 将被添加到 JLabel 中。然后你可以在 ShapeComponent 的标签上添加一个 MouseListener 来改变图标的​​颜色。

于 2013-08-11T15:53:36.417 回答
0

当您使用对象绘制对象时Graphics,它们会在屏幕上呈现。您不能直接更改它们的颜色,相反,当您想要更改它们时,您必须随时重新绘制图形。如果要跟踪对象的颜色,则必须将数据存储在某种变量中并在绘图时使用它。

于 2013-08-11T15:54:04.850 回答