JPanel Graphics清除和重新绘制?

时间:2011-08-01 18:36:02

标签: java swing graphics jpanel paintcomponent

我有JPanelpaintComponent()功能。我会调用一次,然后当用户点击不同的JButton时,我会设置一些标志并想再次调用此函数,因为它会在设置标志后执行稍微不同的操作。

所以我想知道:我如何清除paintComponent中的现有内容?要重新绘制,我是否只需再次调用paintComponent

目前我正在尝试以下方法:

flag2 = true;
repaint(); //I expect (want) paintComponent to be called again

在paint组件中,我做了类似的事情:

if (flag2==true) {
    g.drawRect(...);
} else {
    g.drawLine(...);
}

但通过测试,似乎我正在做的事情有问题。

感谢您的帮助。

4 个答案:

答案 0 :(得分:15)

当您更改面板的属性时,您需要调用:

panel.repaint();

使组件重新绘制。

然后paintComponent()方法中的第一个语句应为:

super.paintComponent(g);

这将绘制背景,以便您现在可以进行自定义绘画。

如果您需要更多帮助,请发布展示问题的SSCCE

答案 1 :(得分:13)

要清除所有以前绘制的图形,请调用g.clearRect(0, 0, getWidth(), getHeight())

答案 2 :(得分:2)

首先,为什么不使用枚举而不是布尔值?

enum Enum { 
    RECTANGLE,
    LINE,
    CIRCLE
}

Enum choice = RECTANGLE; //default to RECTANGLE

switch(choice) { 
   // case RECTANGLE, LINE, CIRCLE
}

关于你的问题,你能回答我在你的问题中的评论吗?

答案 3 :(得分:2)

我建议调用revalidate();而不是重绘()。在更改大小/布局时,或者在jpanel上添加/删除对象时,需要调用revalidate()并更新所有子对象。据我所知,你仍然使用相同的绘画对象,但改变它的布局。