将ImageIcon添加到JPanel中不起作用。

3

我正在尝试将一个ImageIcon添加到我的JPanel中。

ImageIcon image = new ImageIcon("image.png", null);
JLabel label = new JLabel(image, JLabel.CENTER);
panel.add(label);

好的。图片位于与类相同的文件夹中...

com.package
          |- mainclass.java
          |- image.png
          V

无论出于什么原因,图像图标无法在JPanel中显示。 我已经尝试使用try/catch进行排错,但是没有用。完全没有任何错误! 我使用的操作系统是Windows。
3个回答

4

ImageIcon(String) 假设指定的字符串值是文件系统上的文件。

根据您的描述,我猜测该图像嵌入到应用程序中,这意味着它不再可以作为文件访问,而需要作为URLInputStream进行访问。

由于图像和类在同一个包中,您可以使用类似以下的内容:

ImageIcon img = new ImageIcon(getClass().getResource("image.png"));

假设您正在从 MainClass 中加载它。

好的,现在没有空指针异常了,但是它没有显示图片! :( (抱歉!!!) - Aaron Esau
要么加载图像时出错,要么您添加JLabel的方式有问题。 - MadProgrammer

1

编辑

我查看了一些旧代码,发现有类似的情况,结果是我首先将图像添加到JLabel,然后再添加到JPanel中。

请尝试按以下方式将图像添加到JLabel,然后将该JLabel添加到JPanel中。

ImageIcon image = new ImageIcon(this.getClass().getResource("image.png"));
JLabel picLabel = new JLabel(image);
panel.add(picLabel);

图片是否位于同一包中? - Cody Anderson

1
你必须指定从应用程序的根目录看到的完整路径
在你的情况下,你必须使用new ImageIcon("com/package/image.png", null)

但完整路径将会改变,因为计算机不同(这是一个将来要上网的程序……)你的意思是我只需要指定包吗? - Aaron Esau
1
是的,您必须指定包而不是JAR的实际位置。例如,如果您的图像位于JAR内部的“资源”包中,则使用“resources/image.png”。 - João Vitor Verona Biazibetti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接