2013-10-31 8 views
1

我可以通過如何獲得給定LookAndFeel的可用主題?

UIManager.LookAndFeelInfo[] lafInfo = UIManager.getInstalledLookAndFeels(); 

的LookAndFeel列表,但我怎麼能得到如主題列表「金屬」LookAndFeel?
我真的不想硬編碼「DefaultMetal」,「Ocean」和「Test」。

回答

0

你在正確的方式,你必須迭代LaFs並選擇你想要的。

l.getName()迴歸主題名稱

示例代碼:

public static void main(String[] args) { 
    LookAndFeelInfo[] installedLookAndFeels = UIManager.getInstalledLookAndFeels(); 
    for(LookAndFeelInfo l : installedLookAndFeels){ 
     System.out.println(l.getName()); 
     if(l.getName().equals("Metal")){ 
      try { 
       UIManager.setLookAndFeel(l.getClassName()); 
      } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { 
       e.printStackTrace(); 
      } 
      break; 
     } 
    } 
} 

編輯:你可以嘗試找到MetalTheme中的所有子類與反思,但我認爲這是不錯的選擇。

+0

是的,但之後,我如何獲得Metal支持的主題列表? 「主題」並不意味着「LAF的」。它意味着像「配色方案」:「金屬」支持「DefaultMetal」,「海洋」和「測試」。它們由例如MetalLookAndFeel.setCurrentTheme(new OceanTheme()); –

+0

我覺得你不能像那樣'MetalLookAndFeel.setCurrentTheme(新的OceanTheme())''somithing';但你可以設置LaF並通過下一個方法改變它的顏色方案:UIManager.put(「nimbusBase」,new Color(...)); UIManager.put(「nimbusBlueGrey」,new Color(...));'和其他顏色方案鍵。我的意思是你不能列出所有主題 – alex2410

+0

我發現MetalLookAndFeel.setCurrentTheme(new OceanTheme());在關於LAF的oracle swing教程中。但他們沒有說如何列舉可用的主題。請參閱http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html –

0

我不認爲這是可能的。如How to Set Look and Feel教程所示,無法獲取可用的主題列表。如果你去看一下MetalLookAndFeel類有一些靜態方法,但沒有像:

public static MetalTheme[] getAvailableThemes(){...} 

我認爲這將是一個非常有用的功能。無論如何,你最好的機會是對名字進行編碼,因爲你唯一可以做的事情就是確定一個類是否爲Metal的主題,並且問是否是MetalTheme的一個實例,但是幾乎沒有任何東西可以實現你的目標。

+0

好吧,那是個壞消息......我的目標是在兩個ComboBoxes的設置對話框中創建一個選項卡。用戶在第一個框中選擇一個L&F,然後刷新第二個框並提供所選L&F支持的主題選擇。我已經在許多工具中看到了這一點。你認爲他們硬編碼的主題選擇框? –

+0

事實上,對此感到抱歉:(他們可以對主題進行硬編碼或很好地使用反射,但最後一個代價非常昂貴,並不是一個很好的練習,因爲它意味着遍歷整個類路徑,尋找一個從類(或者實現一個接口),我認爲在你的情況下,最好對類進行硬編碼(我們正在談論3個類)@MarkusN。 – dic19

相關問題