Java 将ImageIcon添加到JTabbedPane

Java 将ImageIcon添加到JTabbedPane,java,jpanel,imageicon,jtabbedpane,Java,Jpanel,Imageicon,Jtabbedpane,我正在尝试将图片添加到JTabbedPane的第一个选项卡,以下是我的代码: JTabbedPane application = new JTabbedApplication(); JPanel welcomePanel = new JPanel(); JLabel imageLabel = new JLabel(new ImageIcon("track.jpg")); welcomePanel.add(imageLabel); application.addTab("WELCOME", wel

我正在尝试将图片添加到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,并使用了文本而不是图像,它出现了。有人能给我一些关于这个问题的见解吗?

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);
图像文件与此代码所在的类位于同一位置

而不是
jlabelimagelabel=newjlabel(newimageicon(“track.jpg”)
正在当前工作目录中查找文件,您应该使用
类#getResource
URL
返回到嵌入式资源

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

相反,你可以试着使用像

ImageIcon icon = new ImageIcon(ImageIO.read(getClass().getResource("track.jpg"));
加载图像。与
ImageIcon
不同,
ImageIO.read
会在图像无法读取时抛出
IOException
,这总是比从
ImageIcon


如果这不起作用,则需要在应用程序的结构上添加更多上下文

我尝试过,但图片仍然没有出现。当
图像图标
可以接受
文件
引用时,为什么要将
文件
引用转换为
字符串
?此外,
ImageIO.read
通常在MadProgrammer更为可取:这只是因为toAbsolutionPath()返回一个字符串。并且作为ImageIcon接受文件和字符串。为什么要双重转换?艾迪生C:很遗憾听到这个消息。不知道为什么这对你不起作用。当我测试它时,它工作得很好……我尝试使用@MadProgrammer代码,但我的IDE在编译时声明找不到getClass()。我尝试了:className.getClass()、this.getClass()、className.getResource()、this.getResource(),但没有一个能够正确编译。所以,听起来好像您试图从
静态
上下文加载图像。。。您可以使用
application.getClass()
,但是这假设
JTabbedApplication
类与映像位于同一个包中。如果不是,您可以使用从顶部包到图像的绝对路径