java - 图像不会显示在 JLabel 中

标签 java image swing jlabel

我已经浏览了我在这个网站上找到的所有帖子和 Java 教程,但我仍然无法弄清楚为什么我的代码无法正常工作。即使我复制/粘贴其他人的代码,它仍然不起作用。

我制作了一个虚拟程序来测试它,代码如下所示:

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.ImageIcon;

public class gui extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    gui frame = new gui();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public gui() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 900, 700);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblNewLabel = new JLabel(new ImageIcon("bg.png"));
        contentPane.add(lblNewLabel);
    }
}

我要显示的背景图像 bg.png 位于项目的根文件夹中。我尝试了多种格式的路径字符串但没有成功。我做错了什么?

最佳答案

您做错的是,当您调用 new ImageIcon("bg.png") 时,您尝试从 当前目录。当前目录是执行 java 的目录。当您从 IDE 执行 java 时,当前目录可能不是您认为的目录。

使用以下代码显示当前目录:

File dir1 = new File (".");
System.out.println("current directory: " + dir1.getAbsolutePath());

您应该使用 Class.getResource("/images/bg.png") 从类路径加载 png 文件。在源目录中创建一个 images 文件夹,并将文件放在该目录中。您的 IDE 会将其与 .class 文件一起复制到目标文件夹。如果您不使用 IDE,则必须自己复制。

编辑:

经过更多调查,问题的根本原因似乎是使用了 null 布局。不过,上面的内容仍然有效,因为从当前目录加载文件不是一个好主意。

关于java - 图像不会显示在 JLabel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883937/

相关文章:

java - 运行groovy脚本时intellij构建java项目

java - 相同的 Action 处理程序,多个按钮

Android 图像被压扁

java - 返回用户最近进行的交易

java - Maven 插件编译正常但在执行期间找不到类

python - 导入图像适用于 GAE,但不适用于 dev_appserver.py

java - picasso 图书馆不显示来自 URL 的图像

java - 动态添加按钮框架

java - setVisible() 方法不适用于放置在 JPanel 上的 JButton

java - 检查多个 vector 是否是回文?