我已经绘制了一个面板,但是当程序启动时,面板显示有延迟。我该怎么办?

时间:2013-12-02 08:18:38

标签: java swing paint paintcomponent repaint

我已经绘制了一个面板,但是当程序启动时,面板显示有延迟。我该怎么办?

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 个答案:

答案 0 :(得分:1)

  1. 你在repaint()函数内调用paintComponent(Graphics g):你明白它将是一个递归的绘图堆栈(请求)调用。尝试在代码中打印一个字符串,然后将注意力放在控制台上。

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

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