【问题标题】:How to repaint - prapare JWindow graphics before setting it to visible?如何重新绘制 - 在将其设置为可见之前准备 JWindow 图形?
【发布时间】: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,也试过someJLabelvalidate(); - 没有成功。也许我会在对话框关闭之前尝试将JLabel 文本设置为“”。
  • 是的,我正在尝试重新使用该窗口。

标签: java swing graphics swingworker


【解决方案1】:

尝试一下: jLabel.setText("new text") 在使对话框可见之前 (SomeJWindow.setVisible(true);)。

无论如何,似乎没有必要使用 SwingWorker。 我不会覆盖setVisible(boolean visible)

在调用someExtendedJWindow .setVisible(true)之前,只需在标签上设置文本。

【讨论】:

  • 是的,在这种情况下我已经停止使用SwingWorker,但注意到getGraphics().update() 可以完成这项工作。
猜你喜欢
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2016-12-27
相关资源
最近更新 更多