我画了一个面板,但当程序启动时,面板会延迟显示.我该怎么办



我画了一个面板,但当程序启动时,面板会延迟显示。我该怎么办?

Toolkit kit = Toolkit.getDefaultToolkit();
Image img = kit.getImage(ResourceLoader.class.getResource("wood3.jpg"));

@Override
public void paintComponent(Graphics g) {
    super.paintComponents(g);
    int width = getWidth();
    int height = getHeight();
    Graphics2D graphics = (Graphics2D) g;
    graphics.setStroke(new BasicStroke(1));
    graphics.drawImage(img, 0, 0, width, height, null, null);

    this.updateUI();
    repaint();
}
  1. 您在paintComponent(Graphics g)函数中调用repaint():您知道这将是一个递归绘制堆栈(请求)调用。试着在代码中打印一个字符串,然后将目光放在控制台上。

  2. 使用线程读取图像,并使用SwingUtilities.invokeLater(Runnable)在EDT中运行回转。这样,您就不必等待应用程序加载图像。

  3. 正如MadProgrammer建议的那样,使用Graphics.drawImage(x, y, width, height, ImageObserver)函数。尝试将this设置为"观察者",而不是null@AndrewThompson举了一个例子来展示ImageObserver的用例。然而,我忘记了链接:P

最新更新