2011-05-14 71 views
1

我正在嘗試使用Java UIManager和使用不同的外觀和感覺。我很快發現,這不僅僅是在小程序開始時設置外觀和感覺,而且奇蹟般地看到由此產生的用戶界面變化。我發現,對於某些LAF,我會發現奇怪的不可預知的行爲和失敗。例如,當我將JLabel的字體設置爲Arial大小爲8並且面部爲粗體時,生成的文本將使用Windows或Classic Windows LAF的單個破折號「 - 」代替指定的文本。在其他情況下,如Mac LAF,JTrees停止工作(我正在Windows平臺上實現我的應用程序)。所以我想知道,在更改Java LAF時是否需要遵循一系列步驟,以便無論我選擇哪種LAF,我都可以確信Swing其餘部分的可靠且可預測的行爲?只有某些LAF強健,其餘的只是勇敢的心?Java UIManager行爲

非常感謝您的回覆。

回答

2

我不知道如何精確地回答你的問題。我所能做的就是展示如何使用不同的UI來運行我的應用程序,請參閱下文。該示例顯示我如何從the Substance library安裝外觀和感覺之一。

 public static void main(String[] argv) throws InterruptedException, InvocationTargetException 
     { 
      SwingUtilities.invokeLater(new Runnable() 
      { 
       @Override 
       public void run() 
       { 
        try 
        { 
         UIManager.setLookAndFeel(new SubstanceSaharaLookAndFeel()); 
         //Some people say the below should also be called but even without it always worked for me so what is this for then? 
         //SwingUtilities.updateComponentTreeUI(frame); 
        }catch(Exception e) 
        { 
         Logger.getLogger(MyApplicationFrame.class.getName()).log(Level.SEVERE, null, e); 
         System.out.println("Substance look and feel failed to initialize"); 
        } 
        new MyApplicationFrame(); 
       } 
      }); 
     } 

至於在關於調用SwingUtilities.updateComponentTreeUI(frame);我猜想它在需要的時候你正在改變你的樣子,並在應用程序已經運行感受代碼的註釋。

希望它對你有任何幫助。

+2

**「有人說下面也應該被調用,但是即使沒有,它總是爲我工作,那麼這是什麼?」**當您在可見的GUI上動態更改LAF時,會使用該方法。如果您在創建任何組件之前更改LAF,則無需擔心該組件是使用當前的LAF創建的。 – camickr 2011-05-14 15:07:26

+0

非常感謝@camickr我懷疑這是它的用處。 – Boro 2011-05-14 15:47:51

1

例如,當我將JLabel的字體設置爲Arial大小爲8並且粗體的面部時,生成的文本將是單個破折號「 - 」而不是指定的文本。

可能是因爲你的代碼沒有使用佈局管理器,並且在代碼中的某處使用setBounds(...)或setPreferredSize()。

所以我想知道,是否有一組步驟需要在更改Java LAF時遵循,以便無論我選擇什麼LAF。

從Swing教程Modifying the Look and Feel中閱讀sectin以獲取解釋和工作示例。