2012-01-19 46 views
2

我有兩個關於圖標的問題。JTree上的自定義圖標

我使用ImageIcons作爲JTree上的默認圖標。正如教程建議我用這個方法加載圖標:

protected ImageIcon createImageIcon(String path) { 

     java.net.URL imgURL = getClass().getResource(path); 
     if (imgURL != null) { 
      return new ImageIcon(imgURL); 
     } else { 
      System.err.println("Couldn't find file: " + path); 
      return null; 
     } 
} 

雖然在爲了這個工作,我必須將圖像存儲與源代碼,我相信這是雜亂的文件中(但我看它的需要在.jar上運行)。有沒有類似的方式來加載圖像,而他們是在項目文件夾,而不是在src?

也有一種方法來自動縮放正確大小的圖像在JTree上顯示?謝謝 !

回答

5

該代碼不會從src文件夾加載ImageIcon。它從運行時類路徑加載它。而要將圖像置於運行時類路徑中,最簡單的方法是將它們放在src文件夾中,這樣IDE就會自動將它們與.class文件一起復制到目標文件夾。

如果需要,您可以在項目中定義另一個源目錄(例如resources),並且IDE還會將此源目錄的文件複製到目標文件夾。這允許從資源文件分離Java文件。

+0

您正在使用哪個IDE?如果它是Eclipse:右鍵單擊 - 新建源文件夾。 –

+0

我發現如何定義另一個源目錄,但我如何從其他src的類中引用它? – Giannis

+0

和以前一樣。 Eclipse將兩個源目錄編譯到相同的目標目錄。一切都在運行時在類路徑中。 Java不關心你的源碼是如何組織的。它只是從類路徑加載類和資源。閱讀http://en.wikipedia.org/wiki/Classpath_%28Java%29 –

3

有沒有類似的方式來加載圖像,而他們是在項目文件夾,而不是在src?

是的,你可以使用String構造函數ImageIcon,它可以讓你指定的文件路徑:

ImageIcon imageIcon = new ImageIcon("images/image.png") 

您可以使用相對路徑的工作目錄,或絕對路徑。

還有一種方法可以自動縮放正確大小的圖像以便在JTree上顯示嗎?

看看this question的答案,我想那會讓你做你想做的。

+0

謝謝!只需要找到16 * 16的默認圖標大小 – Giannis