我有JPanel
个paintComponent()
功能。我会调用一次,然后当用户点击不同的JButton
时,我会设置一些标志并想再次调用此函数,因为它会在设置标志后执行稍微不同的操作。
所以我想知道:我如何清除paintComponent
中的现有内容?要重新绘制,我是否只需再次调用paintComponent
?
目前我正在尝试以下方法:
flag2 = true;
repaint(); //I expect (want) paintComponent to be called again
在paint组件中,我做了类似的事情:
if (flag2==true) {
g.drawRect(...);
} else {
g.drawLine(...);
}
但通过测试,似乎我正在做的事情有问题。
感谢您的帮助。
答案 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()并更新所有子对象。据我所知,你仍然使用相同的绘画对象,但改变它的布局。