2014-02-07 53 views
0

我是java的新手,在嘗試從另一個類調用時嘗試更改java文件的外觀時遇到問題。我有兩個班,main.javaauth.java。我已將auth.java文件中的外觀設置爲靈氣。當我嘗試從main.java調用auth類(我附加了下面的代碼片段)時,UI不會改變。但是,當我使用 public static void main(String[] args) in auth.java並嘗試單獨運行該文件時,jFrame的UI會更改。請讓我知道是否有辦法在從另一個班級調用jFrame時更改UI的UI。是否有任何問題從another class調用jFrame,這是一個很好的做法?因爲我們正在做一個大項目,並且需要一段時間調用認證框架,所以任何建議傢伙? 謝謝大家! :)當從另一個類中調用Java時,Java不會改變外觀和感覺

main.java:

package com.package.name; 
public class main { 
    public static void main(String[] args) { 
     new auth(); 
    } 
} 

這是我auth.java代碼段:

package com.package.name; 
import javax.swing.*; 
import java.awt.*; 

public class auth extends JFrame { 
    public auth() { 
     initComponents(); 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel ("javax.swing.plaf.nimbus.NimbusLookAndFeel"); 
       } catch (ClassNotFoundException e) { 
        e.printStackTrace(); 
       } catch (InstantiationException e) { 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        e.printStackTrace(); 
       } catch (UnsupportedLookAndFeelException e) { 
        e.printStackTrace(); 
       } 
       setVisible(true); 
       setDefaultCloseOperation(EXIT_ON_CLOSE); 
       pack(); 
      } 
     }); 
    } 
+0

任何錯誤消息..? –

+0

沒有..沒什麼,只是當我們嘗試從主 – Ganesh

回答

3

你改變一下感覺之前已經調用initComponents。這會將當前安裝的外觀和感覺安裝到這些組件中。

,而不必去和指示每個組件更新其UI,你可以簡單地換一下的安裝,並initComponents方法感覺,例如...

try { 
    UIManager.setLookAndFeel ("javax.swing.plaf.nimbus.NimbusLookAndFeel"); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} catch (InstantiationException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (UnsupportedLookAndFeelException e) { 
    e.printStackTrace(); 
} 
initComponents(); 
setVisible(true); 
setDefaultCloseOperation(EXIT_ON_CLOSE); 
pack(); 

現在,話說回來。在您調用auth構造函數之前,您應該已經在EDT的背景下進行了測試,auth應該不是真的在做出關於外觀和感覺的決定。如果您想以不同的外觀和感覺再次使用此框架,會發生什麼情況?

相反可以做更多的東西一樣

public class main { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel ("javax.swing.plaf.nimbus.NimbusLookAndFeel"); 
       } catch (ClassNotFoundException e) { 
        e.printStackTrace(); 
       } catch (InstantiationException e) { 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        e.printStackTrace(); 
       } catch (UnsupportedLookAndFeelException e) { 
        e.printStackTrace(); 
       } 
       new auth(); 
      } 
     }); 
    } 
} 

public class auth extends JFrame { 
    public auth() { 
     initComponents(); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     pack(); 
    } 

你也應該考慮一下通過Code Conventions for the Java Programming Language,它會讓你的代碼更容易閱讀;)

+0

調用auth類的老java java laf是的,我起初嘗試了這種方法,而且工作真的很好。但我認爲我們需要在各自的課程中聲明laf。 :) 謝啦。還有另外一個問題,如果我有另一個課程,並希望改變它的LAF呢?只需添加新的class2();到主要班級會做什麼? – Ganesh

+1

安裝完外觀後,所有創建的新組件都將使用,這就是爲什麼您首先遇到問題的原因。所以是的,只是不斷創建對象,他們會使用相同的外觀和感覺。 – MadProgrammer