图像无法立即在Swing Java桌面应用程序中绘制/加载

时间:2011-06-16 22:48:12

标签: java image swing desktop-application loading

当我运行使用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);

有没有更好的方法来调用图像?我应该实现图像处理代码吗?

我该如何解决?

2 个答案:

答案 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自定义代码部分创建并将图像分配给变量也有效。那是因为图像有更多的时间来创建..