2017-04-12 75 views
0

我试图将图片添加到JTabbedPane中的第一个选项卡,这里是我的代码:添加的ImageIcon到JTabbedPane的

JTabbedPane application = new JTabbedApplication(); 
JPanel welcomePanel = new JPanel(); 
JLabel imageLabel = new JLabel(new ImageIcon("track.jpg")); 
welcomePanel.add(imageLabel); 
application.addTab("WELCOME", welcomePanel); 
application.setMnemonicAt(0, KeyEvent.VK_1); 

图像文件位于同一位置类这段代码中不过,出于某种原因,我的形象并没有出现。我已经使用了相同的JLabel并使用了文本而不是图像,并且它出现了。有人能让我对这个问题有所了解吗?

回答

1

Java并不知道图像直接位于正在运行的类文件旁边。你必须交出绝对路径。这意味着路径+文件名。

这段小小的代码将帮助您告诉Java该图像位于当前工作目录中。

String file = new File("track.jpg").getAbsolutePath(); 

添加到您的代码剪断它看起来像这样:

JTabbedPane application = new JTabbedPane(); 
JPanel welcomePanel = new JPanel(); 
String file = new File("track.jpg").getAbsolutePath(); 

JLabel imageLabel = new JLabel(new ImageIcon(file)); 
welcomePanel.add(imageLabel); 
application.addTab("WELCOME", welcomePanel); 
+0

我试过了,但图片仍然没有出现。 –

+0

为什么当'ImageIcon'可以接受'File'引用时,将'File'引用转换为'String'?此外,'ImageIO.read'通常更可取 – MadProgrammer

+0

在MadProgrammer:那么这只是因为toAbsolutePath()返回一个字符串。正如ImageIcon同时接受文件和字符串。为什么要双重转换?在Addison C: 对不起。不知道为什么这不适合你。当我测试它时,它工作得很好... – DiabolicWords

0

图像文件位于同一位置类这段代码是

代替JLabel imageLabel = new JLabel(new ImageIcon("track.jpg"));这是在当前的工作目录中寻找一个文件,你应该使用Class#getResource这将返回URL到嵌入式资源。

重要的是要注意,存储在应用程序上下文中(即嵌入Jar内或源代码包内)的资源不再作为“文件”访问。

相反,你可以尝试使用类似...

ImageIcon icon = new ImageIcon(ImageIO.read(getClass().getResource("track.jpg")); 

加载图像。不像ImageIconImageIO.read将抛出IOException如果图像不能被读取,它总是比你从ImageIcon

得到如果这无法工作的沉默更实用,更方面对你的应用程序的结构将需要

+0

我尝试使用该代码@MadProgrammer,但我的IDE在编译时声明无法找到getClass()。我尝试过:className.getClass(),this.getClass(),className.getResource(),this.getResource(),但没有一个能够正确编译。 –

+0

Soooo,这听起来像你试图从'static'上下文中加载图像......必须爱'static',你可以使用'application.getClass()',但是这个假设'JTabbedApplication'类是与图像位于同一个包中。如果它们不是,那么可以使用从顶层包到图像的绝对路径 – MadProgrammer