改变绘制椭圆的颜色

时间:2013-08-11 15:49:37

标签: java swing object awt java-2d

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

}

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

3 个答案:

答案 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对象绘制对象时,它们将在屏幕上呈现。您不能直接更改它们的颜色,而是在您想要更改图形时随时重新绘制图形。如果要跟踪对象的颜色,则必须将数据存储在某种变量中,并在绘制时使用它。