Java 如何将ImageIcon添加到JDialog中?

Java 如何将ImageIcon添加到JDialog中?,java,swing,jlabel,jdialog,imageicon,Java,Swing,Jlabel,Jdialog,Imageicon,我试图创建一个浮动对话框,其中包含一个加载gif图像和一些文本。我有以下课程: public class InfoDialog extends JDialog { public InfoDialog() { setSize(200, 50); setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); setUndecorated(true); setLocationRela

我试图创建一个浮动对话框,其中包含一个加载gif图像和一些文本。我有以下课程:

public class InfoDialog extends JDialog {
    public InfoDialog() {
        setSize(200, 50);
        setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        setUndecorated(true);
        setLocationRelativeTo(null);

        URL url = InfoDialog.class.getClassLoader().getResource("loader.gif");
        ImageIcon loading = new ImageIcon(url);
        getContentPane().add(new JLabel("Logging in ... ", loading, JLabel.CENTER));
    }
}
然而,当我打电话时:

   InfoDialog infoDialog = new InfoDialog()
   infoDialog.setVisible(true);
将显示一个空对话框。对话框中不显示图像图标和标签

我在这个代码中做错了什么


非常感谢。

我会将
ImageIcon
添加到
JLabel
中,然后将
JLabel
添加到
JDialog
内容窗格中,然后在构造函数中添加一个
this。验证
this。重新绘制


为了调试,有时您需要实际的代码,没有这些代码,这些只是基于假设的建议。我会将
ImageIcon
添加到
JLabel
中,然后将
JLabel
添加到
JDialog
内容窗格中,然后在构造函数中添加
this.validate
this.repoint


要进行调试,有时需要实际的代码,如果没有这些代码,这些代码只是基于假设的建议

图像通常放在“资源”源文件夹中


然后作为字节流访问

package com.foo;

import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class Demo 
{
    private static final String IMAGE_URL = "/resource/bar.png";

    public static void main(String[] args) 
    {
        createAndShowGUI();
    }

    private static void createAndShowGUI()
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run() 
            {
                try
                {
                    JDialog dialog = new JDialog();     
                    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                    dialog.setTitle("Image Loading Demo");

                    dialog.add(new JLabel(new ImageIcon(ImageIO.read(getClass().getResourceAsStream(IMAGE_URL)))));

                    dialog.pack();
                    dialog.setLocationByPlatform(true);
                    dialog.setVisible(true);
                } 
                catch (IOException e) 
                {
                    e.printStackTrace();
                }
            }
        });
    }
}
生产摩根·弗里曼


图像通常放在“资源”源文件夹中


然后作为字节流访问

package com.foo;

import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class Demo 
{
    private static final String IMAGE_URL = "/resource/bar.png";

    public static void main(String[] args) 
    {
        createAndShowGUI();
    }

    private static void createAndShowGUI()
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run() 
            {
                try
                {
                    JDialog dialog = new JDialog();     
                    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                    dialog.setTitle("Image Loading Demo");

                    dialog.add(new JLabel(new ImageIcon(ImageIO.read(getClass().getResourceAsStream(IMAGE_URL)))));

                    dialog.pack();
                    dialog.setLocationByPlatform(true);
                    dialog.setVisible(true);
                } 
                catch (IOException e) 
                {
                    e.printStackTrace();
                }
            }
        });
    }
}
生产摩根·弗里曼


如果停止添加.gif,它是否至少显示文本?是否抛出任何异常?这对我来说很好。你在EDT中显示了IfFudio。也考虑加载你的图像。假设Looul.gif包含在缺省包内的jar和出口中,如果停止添加.gif,那么尝试添加一个“//”到路径的开始处(即,加载程序。GIF)是否至少显示文本?是否抛出任何异常?这对我来说很好。你在EDT中显示了IfFudio,也考虑了加载你的图像。假设装载器。GIF包含在默认包内的jar和出口中,尝试在路径开始时添加一个“/”,即“代码/>验证())/<代码>和<代码> RePrimeTo()/<代码> > <代码> SETVISIOBLE()/<代码>。遗憾的是,我没有看到
pack()
。为什么要在
setVisible()之前
validate()
repaint()
?遗憾的是,对于
ImageIO.read()
,我看不到
pack()
+1,但是
ImageIcon
可以直接使用
getResource()
@trashgood()返回的
URL
,+1,但是我想对
ImageIO.read()使用
getResourceAsStream
+1,但是
ImageIcon
可以直接使用
getResource()
@trashgood+1返回的
URL
,但是我想使用
getresourceastream