我似乎无法在Swing中强制布局。我在JComponent
上添加了JLayeredPane
,并在JComponent
上设置了边框。然后,我想立即重新绘制所有内容-不是像invalidate()
那样“尽快完成”,而是同步且立即进行。有什么帮助吗?我似乎找不到正确的方法,而我对invalidate(), validate(), repaint(), doLayout(), etc
的所有阅读都使我更加困惑!
根据this(请参阅标题为“同步绘画”的部分),paintImmediately()方法应该可以工作。
使Swing更新显示的最可靠方法是使用SwingUtilities.invokeLater
。就您而言,它看起来像
SwingUtilities.invokeLater(new Runnable {
public void run() {
somecomponent.repaint();
}
});
我意识到'invokelater'听起来并不像立即执行任何操作,但实际上,以这种方式发布的事件与仅调用例如直接somecomponent.repaint()
。如果绝对必须让您的控制代码等待GUI更新,那么也有invokeAndWait
,但是我的经验是,这几乎没有必要。
另请参见:Swing中的document on event dispatch。
这已经很老了,但是我找到了一个简单的解决方案,将使用JPasswordField进行显示:
var pw = new JPasswordField();
...
pw.paint(pw.getGraphics()); // paints immediately