我已经使用Java Swing创建了一个GUI,并希望根据我的模块创建自定义工具栏。以下是我想要使用的图片:
这些图像与我的应用程序中的src文件夹位于同一级别。我知道我可以用这些图像创建一个jar,这样我就可以从我的应用程序中轻松访问它们,但不知道如何。我花了好几个小时努力完成这项工作。
下面是我创建的广告网页,我希望用工具栏中的这些图片来美化广告,否则会创建一个标签数组,这些标签将充当导航,但这两种方法都无法让它发挥作用。
以下代码是我最后一次尝试:
JToolBar toolbar1 = new JToolBar();
ImageIcon client = new ImageIcon("clients.png");
ImageIcon timesheet = new ImageIcon("timesheets.png");
JButton clientTB = new JButton(client);
JButton timesheetTB = new JButton(timesheet);
toolbar1.add(clientTB );
toolbar1.add(timesheetTB);
add(toolbar1, BorderLayout.NORTH);
我甚至移动了这些图像,并将它们放在要调用它们的类中。
我能做错什么,请帮帮忙?
答案 0 :(得分:2)
您可以查看ImageIcon(String)
的JavaDoc,String
值“指定文件名或路径的字符串”
这是一个问题,因为您的图像实际上不是文件,它们已经嵌入到您的应用程序中(通常在生成的jar文件中),不再被视为“普通文件”。
相反,您需要使用Class#getResource
在应用程序的类路径中搜索命名资源,类似于......
// This assumes that the images are in the default package
// (or the root of the src directory)
ImageIcon client = new ImageIcon(getClass().getResource("/clients.png"));
现在,我个人不喜欢ImageIcon
,因为它不会告诉你图像因某种原因被加载的时候,就像找不到它或格式错误一样。
相反,我会使用ImageIO
来阅读图片
ImageIcon client = new ImageIcon(ImageIO.read(getClass().getResource("/clients.png")));
这将做两件事,首先,如果由于某种原因无法加载图像,它将抛出IOException
,在图像完全加载之前它将不会返回,这是有帮助的。
有关详细信息,请参阅Reading/Loading an Image