我不太擅长创建Swing应用程序。所以我有一个问题,如何将图标设置给JButton
。
我的项目结构如下:
我在MainWindow
类中有一个简单的JButton
,它看起来像这样:
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
类相同的文件夹中 - 将图片放在项目根文件夹中
- 尝试像这样做:
tactButton.setIcon(new ImageIcon("/images/button_next.jpg"));
但是我遇到了这个异常,或者如果我使用tactButton.setIcon(new ImageIcon("/images/button_next.jpg"));
,那么我只会得到一个没有图像的简单按钮。
最后,我写了绝对路径到我的图像,这很好用(但是绝对路径不是一个好主意)。你能帮我吗?
我看了这个问题如何将图像添加到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));