JPanel Graphics清除和重新绘制?

我有一个带有paintComponent()函数的JPanel 。 我会调用一次,然后当用户点击不同的JButton ,我会设置一些标志,并希望再次调用此函数,因为它会在设置标志后稍微有所不同。

所以这就是我想知道的:如何从paintComponent清除现有的东西? 要重绘,我只是再次调用paintComponent吗?

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

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

在paint组件中,我做的事情如下:

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

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

谢谢你的帮助。

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

 panel.repaint(); 

使组件重新绘制。

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

 super.paintComponent(g); 

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

如果您需要更多帮助,请发布说明问题的SSCCE 。

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

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

 enum Enum { RECTANGLE, LINE, CIRCLE } Enum choice = RECTANGLE; //default to RECTANGLE switch(choice) { // case RECTANGLE, LINE, CIRCLE } 

关于您的问题,您可以在问题中回答我的意见吗?

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