当我运行使用Netbean的Swing创建的Java桌面应用程序时,JLabel图标图像会立即加载,但是在我唤醒(重新调整大小)窗口之前,我的JPanel上的背景图像不会绘制到屏幕上。 / p>
以下是我的JPanel上的自定义代码:
Image image = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/background.gif"));
javax.swing.JPanel panelBackground = new BackgroundPanel(image);
有没有更好的方法来调用图像?我应该实现图像处理代码吗?
我该如何解决?
答案 0 :(得分:2)
对我来说很好。我使用Background Panel测试了它。如果您还有问题,请发布SSCCE。
import java.awt.*;
import javax.swing.*;
public class BackgroundSSCCE extends JPanel
{
public BackgroundSSCCE()
{
setLayout( new BorderLayout() );
Image duke = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("dukeWaveRed.gif"));
BackgroundPanel test = new BackgroundPanel(duke, BackgroundPanel.ACTUAL, 1.0f, 0.5f);
add(test);
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("BackgroundSSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new BackgroundSSCCE() );
frame.setSize(200, 200);
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
答案 1 :(得分:0)
知道了!
非常感谢 Hovercraft Full Of Eels 指针
“如果您使用ImageIO.read(...)获取图像会发生什么?此外,您是否在渲染后将图像显示组件添加到GUI中?”
以及 camickr 以供思考的代码。
我使用以下方法解决了这个问题:
Image imgBackground = ImageIO.read(getClass().getResourceAsStream("/images/background.gif"));
在我的课程开头而不是在JPanels自定义代码部分创建并将图像分配给变量也有效。那是因为图像有更多的时间来创建..