有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

当我运行使用Netbean的Swing创建的Java桌面应用程序时,会立即加载JLabel图标图像,但在我唤醒(重新调整)窗口之前,JPanel上的背景图像不会绘制到屏幕上

这是我的JPanel上的自定义代码:

Image image = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/background.gif"));
javax.swing.JPanel panelBackground = new BackgroundPanel(image);

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

我该怎么修


共 (2) 个答案

  1. # 1 楼答案

    明白了

    非常感谢装满鳗鱼的气垫船作为指针

    "What happens if you use ImageIO.read(...) to get your image? Also, are you adding the image-displaying component to the GUI after it has been rendered?"

    和camickr的代码

    我通过以下方法解决了这个问题:

        Image imgBackground = ImageIO.read(getClass().getResourceAsStream("/images/background.gif"));
    

    在类的开头而不是在JPanels自定义代码部分创建图像并将其分配给变量也很有效。这是因为图像有更多的时间来创建

  2. # 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();
                }
            });
        }
    }