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