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