强制立即布局和在Swing中绘制

问题描述 投票:6回答:3

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

swing layout paint
3个回答
2
投票

根据this(请参阅标题为“同步绘画”的部分),paintImmediately()方法应该可以工作。


0
投票

使Swing更新显示的最可靠方法是使用SwingUtilities.invokeLater。就您而言,它看起来像

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

我意识到'invokelater'听起来并不像立即执行任何操作,但实际上,以这种方式发布的事件与仅调用例如直接somecomponent.repaint()。如果绝对必须让您的控制代码等待GUI更新,那么也有invokeAndWait,但是我的经验是,这几乎没有必要。

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


0
投票

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

var pw = new JPasswordField();
...
pw.paint(pw.getGraphics()); // paints immediately
© www.soinside.com 2019 - 2024. All rights reserved.