图像不会显示在JLabel中

时间:2012-01-16 17:35:53

标签: 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位于项目的根文件夹中。我为路径字符串尝试了多种格式但没有成功。我做错了什么?

5 个答案:

答案 0 :(得分:4)

您所犯错的是,当您致电new ImageIcon("bg.png")时,您尝试从当前目录加载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布局。但是,上面仍然有效,因为从当前目录加载文件不是一个好主意。

答案 1 :(得分:3)

您正在寻找图像作为文件。执行此操作时,搜索全部在相对于用户目录的路径中完成,您可以通过

获取
// code not tested
System.out.println(System.getProperty("user.dir"));

因此,您可能需要调整图像的路径才能将其作为文件。另一种选择是将其作为资源,如Siva Charan所述,在这种情况下,路径是相对于类文件的位置。

哦,一旦你学习和使用布局管理器,他们变得直观,创建和维护你的GUI变得更加容易。

答案 2 :(得分:2)

尝试这种方式: -

ImageIcon icon = createImageIcon("bg.png", "image description");

protected ImageIcon createImageIcon(String path, String description) {
    java.net.URL imgURL = getClass().getResource(path);

    if (imgURL != null) {
        return new ImageIcon(imgURL, description);
    } else {
        System.err.println("Couldn't find file:" +path);
        return null;
    }
}

答案 3 :(得分:2)

只需将您的bg.png与您的gui.class文件放在一起即可。如果你编写这段代码,那就可以了。

private ImageIcon getImage(String path)
{
    URL url = getClass().getResource(path);
    System.out.println(url);
    if (url != null)
        return (new ImageIcon(url));
    return null;
}

可在Access to Resources

上找到更多信息

这里path =“bg.png”;或者如果它在某个文件夹中而不是path =“someFolder / bg.png”; 所以你要写这样的东西:

JLabel lblNewLabel = new JLabel(getImage("bg.png"));
lblNewLabel.setBounds(30, 30, 100, 100);

希望这可能会有所帮助。

此致

答案 4 :(得分:0)

您可能需要调试它并检查图像文件是否正确加载。然后,您需要检查JLabel组件是否获得其大小,因为将图像添加到JLabel不会扩展JLabel。

首先,您应该尝试查看图像处理程序的宽度和高度。