强制立即布局并在Swing中绘画

时间:2011-01-21 16:44:33

标签: swing layout paint

我似乎无法在Swing中强制布局。我在JComponent添加了JLayeredPane,并在JComponent上设置了边框。然后,我想立即重新绘制所有内容 - 不是像invalidate()那样“请尽快做”,而是同步并立即进行。有帮助吗?我似乎无法找到正确的方法来做到这一点,而我对invalidate(), validate(), repaint(), doLayout(), etc的所有阅读只会让我更加困惑!

3 个答案:

答案 0 :(得分:2)

根据this(参见标题为“同步绘画”的部分),paintImmediately()方法应该有效。

答案 1 :(得分:0)

让Swing更新显示的最可靠方法是使用SwingUtilities.invokeLater。在你的情况下,它看起来像

SwingUtilities.invokeLater(new Runnable {
                             public void run() { 
                                somecomponent.repaint();
                             }
                           });

我意识到'invokelater'并不完全听起来像它做任何直接的事情,但在实践中,以这种方式发布的事件往往执行起来相当于仅仅调用例如somecomponent.repaint()直接。如果你绝对必须让你的控制代码等待GUI更新,那么还有invokeAndWait,但我的经验是这很少是必要的。

另请参阅:Swing中的document on event dispatch

答案 2 :(得分:0)

这已经很老了,但是我找到了一个简单的解决方案,将使用JPasswordField进行显示:

var pw = new JPasswordField();
...
pw.paint(pw.getGraphics()); // paints immediately