这是我的代码
boolean boo = true;
ItemListener itemListener = new ItemListener() {
public void itemStateChanged(ItemEvent event) {
boo= false;
aSwingObj.repaint();
boo = true;
}
}
我希望在boo设置为false之前运行repaint()方法,然后才变为true。
问题是repaint()函数仅在变量boo再次设置为true后执行。我尝试过其他方法,如revalidate(),validate(),但它不起作用。我该如何修复我的代码?
答案 0 :(得分:0)
这是XY problem。你不想强迫JPanel立即重画。您希望在绘画开始之前立即进入特定状态,并在绘画结束后立即退出该状态。
实现这一目标的一种方法实际上是进入该状态,在现场强行重绘,然后退出该状态。但正如你所看到的,这有点难以实现。
所以,另一种方法是创建一个新的类extend JPanel
(或aSwingObj
的类),以便您可以覆盖paintComponent()
方法并使其退出绘画完成后的特殊状态。
因此,您展开的paintComponent()
的{{1}}方法如下所示:
JPanel
其中 @Override
public void paintComponent( Graphics g )
{
super.paintComponent( g );
resetBoo();
}
是执行resetBoo()