【发布时间】:2013-09-15 01:01:20
【问题描述】:
为了避免在 JWindow 设置为可见后出现任何闪烁,我已经这样做了 - 但我仍然看到一些 JLabel 几毫秒(树:JWindow -> JPanel -> @987654325 @) 旧文本,然后文本更改为新值(必须在 JWindow 设置为可见之前完成):
public SomeExtendedJWindow extends SomeJWindow {
@Override
public void setVisible(boolean visible) {
if (visible) {
class doGraphics extends SwingWorker<Void, Object> {
@Override
public Void doInBackground() {
validate();
pack();
return null;
}
@Override
protected void done() {
SomeJWindow.super.setVisible(true);
}
}
(new doGraphics()).execute();
}
}
}
也许我也应该验证JLabels 或做点什么?
【问题讨论】:
-
如果你想避免闪烁,你应该避免直接画到窗口,而是画到像JPanel这样的东西,它是双缓冲的
-
母亲的想法是在使其可见之前将窗口打包并将其放置在屏幕之外的某个位置,然后移动到屏幕的可见区域
-
@MadProgrammer 这是一个常见问题,默认情况下,当你重新使用弹出容器时,你可以看到,捕捉到 Xxx.setVisible 之后的先前值 ....
-
试过
someJPanel,也试过someJLabel到validate();- 没有成功。也许我会在对话框关闭之前尝试将JLabel文本设置为“”。 -
是的,我正在尝试重新使用该窗口。
标签: java swing graphics swingworker