2012-02-14 123 views
4

我有大量的jbuttons,jtextfields,jlabels,jmenus,gui項目,並且一次一個地設置背景顏色和前景色非常費時。如何一次設置所有Java Swing GUI組件背景和前景(字體)顏色?

我希望能夠快速/簡潔地在我的項目中爲所有jmenus,jmenuitems,jtextfields,jbuttons等字體(前景)和背景着色,而不必一次設置一個。

有沒有什麼技術可以更簡潔地做到這一點,而不是一次做一個?

+0

每個人都是對的,所以每個人的回答都是正確的 – 2012-02-14 19:10:12

+0

+1 – mKorbel 2012-02-14 19:11:51

回答

4

您可以將Swing與CSS結合使用或使用Swing Look &感受爲了爲您的組件創建標準外觀。 Java site說:

在我們進入CSS實現之前,讓我們考慮一下替代方案:自定義的外觀和感覺。 Swing外觀和感覺(L & Fs)是一組類,它們以非常低的級別實現組件的實際繪製(思考線和位圖)。它們可以在運行時換出新的,通常用於實現本地平臺的外觀;即用於OSX的JDK具有使Swing應用看起來像本地Aqua應用的一組類,其具有糖果按鈕和藍色色調。自定義L & F是強大的,但不是微不足道或快速構建。您通常必須碰觸20個左右的類並實現一大堆特殊的繪圖代碼。

所以CSS更易於使用。同一篇文章繼續介紹如何使用Swing實現CSS。他們爲創建正確的規則提供了一個很好的演練,然後繼續在CSS中實現它們。但是,這不是簡單的「複製和粘貼」代碼。

如果您只想使用包裝(無需親自編碼),則問題Can I use CSS for Java Swing?的答案建議爲Flying SaucerJaxx

4

他們都JComponents這樣你就可以把一切的ArrayList

//Adding everything to the ArrayList 
ArrayList<JComponent> myComponents = new ArrayList<JComponents>(); 

JButton b1 = new JButton("Button 1"); 
myComponents.add(b1); 

JMenuItem item = new JMenuItem("Menu Item 1"); 
myComponents.add(item); 

//Coloring the foreground/background 
for(JComponent j : myComponents) { 
    j.setForeground(new Color("BLUE")); 
    j.setBackground(new Color("RED")); 
} 
3

如果您使用的外觀和感覺,榮譽在javax.swing.UIManager的UI常數,那麼你可以只設置。有值的例如面板背景。如果不是,或者您無法控制足夠的外觀,您可以編寫自己的UI委託來繪製特定組件(例如,用於JButton的javax.swing.plaf.ButtonUI)。如果這還不夠,你可以寫出自己的外觀和感覺。如果你只是擴展Metal LnF並不難,你可以編寫自己的UI代理並設置屬性,如上所述,但集中。