簡體   English   中英

如何將圖像圖標設置為JButton

[英]How set image icon to JButton

我不是很擅長創建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並試圖像那樣做。

UPDATE

創建按鈕和設置圖標的完整代碼:

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

嘗試

new ImageIcon(MainWindow.class.getResource("/images/button_next.jpg");

另外,嘗試將此.jpg轉換為.png:D

如果您使用Maven,那么您不需要做任何事情。 M2E將為您處理一切。

將源代碼放在src/main/java

將您的資源(圖像,文本文件等)放在src/main/resources

如果不使用默認文件夾,則應修改pom.xml文件以指示源和資源的位置。 在此之后,右鍵單擊您的項目,轉到Maven - >更新項目...並確保選中“從pom.xml更新項目配置”框

而已。 你應該好好去。

你是如何運行你的應用程序的? 直接來自Eclipse,還是你通過Maven構建一個jar?

我在你的樹中看到一個pom.xml文件,所以我懷疑你是通過Maven構建的。 在這種情況下,Maven可能沒有在您的輸出jar中放置任何資源文件(即除了.java文件之外的任何文件)。 Maven希望源文件與資源位於不同的目錄中。 默認情況下,這些目錄是src / main / java和src / main / resources。 但是,您可能已經為項目定制了源目錄,因為我直接在src目錄中看到了源文件。

我會檢查你生成的.jar文件,以確保圖像實際上在那里結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM