我不是很擅长创建Swing应用程序。所以我有问题如何将图标设置为JButton
。
我的项目结构如下:
我在JButton
课程中有简单的MainWindow
:
它看起来像这样:
tactButton = new JButton("next tact");
我希望使用方法setIcon
将图像设置为此按钮。我的代码如下所示:
tactButton.setIcon(new ImageIcon(getClass().getResource("/images/button_next.jpg")));
但是当我启动应用程序时,我有例外:
java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at by.bulgak.conveyor.gui.MainWindow.<init>(MainWindow.java:117)
at by.bulgak.conveyor.gui.MainWindow$1.run(MainWindow.java:46)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
所以我尝试了不同的东西:
MainWindow
class tactButton.setIcon(new ImageIcon("/images/button_next.jpg"));
但是我有这个例外,或者如果我使用tactButton.setIcon(new ImageIcon("/images/button_next.jpg"));
我有一个没有图像的简单按钮。
最后我写了我的图像的绝对路径,这很好(但绝对路径不是好主意)。你能帮帮我吗?
我查看了问题How do I add an image to a JButton并试图像那样做。
更新
创建按钮和设置图标的完整代码:
tactButton = new JButton("next tact");
tactButton.setSize(100, 100);
tactButton.setIcon(new ImageIcon(MainWindow.class.getResource("/images/button_next.jpg")));
tactButton.addActionListener(new ProcessorNextStepListener(this));
答案 0 :(得分:4)
尝试
new ImageIcon(MainWindow.class.getResource("/images/button_next.jpg");
另外,尝试将此.jpg转换为.png:D
答案 1 :(得分:4)
如果您使用的是Maven,那么您不需要做任何事情。 M2E将为您处理一切。
将您的源代码放在src/main/java
将您的资源(图片,文本文件等)放在src/main/resources
如果您不使用默认文件夹,则应修改pom.xml
文件以指明源和资源的位置。在此之后,右键单击您的项目,转到Maven - &gt;更新项目...并确保选中“从pom.xml更新项目配置”框
就是这样。你应该好好去。
答案 2 :(得分:2)
你是如何运行你的应用程序的?直接来自Eclipse,或者你是通过Maven构建一个jar?
我在你的树中看到一个pom.xml文件,所以我怀疑你是通过Maven构建的。在这种情况下,Maven可能没有在您的输出jar中放置任何资源文件(即除了.java文件之外的任何文件)。 Maven希望源文件与资源位于不同的目录中。默认情况下,这些目录是src / main / java和src / main / resources。但是,您可能已经为项目定制了源目录,因为我直接在src目录中看到了源文件。
我会检查你生成的.jar文件,以确保图像实际上就在那里。