如何强制Jpanel立即用Java重绘?

时间:2017-05-13 06:35:27

标签: java swing repaint

这是我的代码

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(),但它不起作用。我该如何修复我的代码?

1 个答案:

答案 0 :(得分:0)

这是XY problem。你不想强迫JPanel立即重画。您希望在绘画开始之前立即进入特定状态,并在绘画结束后立即退出该状态。

实现这一目标的一种方法实际上是进入该状态,在现场强行重绘,然后退出该状态。但正如你所看到的,这有点难以实现。

所以,另一种方法是创建一个新的类extend JPanel(或aSwingObj的类),以便您可以覆盖paintComponent()方法并使其退出绘画完成后的特殊状态。

因此,您展开的paintComponent()的{​​{1}}方法如下所示:

JPanel

其中 @Override public void paintComponent( Graphics g ) { super.paintComponent( g ); resetBoo(); } 是执行resetBoo()

的方法