使用Java Swing for Desktop的自定义工具栏

时间:2015-10-20 12:15:19

标签: java swing

我已经使用Java Swing创建了一个GUI,并希望根据我的模块创建自定义工具栏。以下是我想要使用的图片:

enter image description here

这些图像与我的应用程序中的src文件夹位于同一级别。我知道我可以用这些图像创建一个jar,这样我就可以从我的应用程序中轻松访问它们,但不知道如何。我花了好几个小时努力完成这项工作。

下面是我创建的广告网页,我希望用工具栏中的这些图片来美化广告,否则会创建一个标签数组,这些标签将充当导航,但这两种方法都无法让它发挥作用。

enter image description here

以下代码是我最后一次尝试:

 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);

我甚至移动了这些图像,并将它们放在要调用它们的类中。

我能做错什么,请帮帮忙?

1 个答案:

答案 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