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
すべての写真をクラスと同じフォルダーに入れる- 写真をプロジェクトのルート フォルダに入れる
- のようなものを試す
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));