我画了一个面板,但当程序启动时,面板会延迟显示。我该怎么办?
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();
}
-
您在
paintComponent(Graphics g)
函数中调用repaint()
:您知道这将是一个递归绘制堆栈(请求)调用。试着在代码中打印一个字符串,然后将目光放在控制台上。 -
使用线程读取图像,并使用
SwingUtilities.invokeLater(Runnable)
在EDT中运行回转。这样,您就不必等待应用程序加载图像。 -
正如MadProgrammer建议的那样,使用
Graphics.drawImage(x, y, width, height, ImageObserver)
函数。尝试将this
设置为"观察者",而不是null
@AndrewThompson举了一个例子来展示ImageObserver
的用例。然而,我忘记了链接:P