2009-08-06 21 views
0

我想在JLabel中有一個ImageIcon,我將能夠從另一種方法進行更新。但我無法想出一種方法來創建一個靜態JLabel(以便能夠從另一種方法中獲取它),並將其設置爲包含imageIcon的Jlabel--是否有除JLabel標籤之外的另一種方法=新的JLabel(imgIcon)用imageIcon創建一個標籤?試圖使用setIcon方法,而不將標籤按照上面的方式安裝,但它給出了空指針異常。衷心感謝您的幫助。如何製作具有可用於所有方法和類的imageIcon的JLabel?

回答

1

不要讓JLabel成爲靜態 - 而是將其定義在其他方法之外,但仍然在您的類中。

public class Test { 

    private JLabel label = new JLabel(new ImageIcon(/*your icon*/)); 
} 

如果需要從另一個類訪問,創建訪問方法:

public JLabel getLabel() { 
    return label; 
} 
+0

訪問可我如果它是在任何方法之外創建的,則可以從同一類中的其他方法訪問它?因爲我得到一個錯誤,告訴我一個非靜態變量不能被靜態上下文引用?這是否意味着即使是在同一個類中,我也必須使用getlabel(0方法?如果是這樣,我該如何使用getlabel()方法?是否需要創建一個標籤來調用getLabel方法,即label2 = test。 getLabel()?或者如何訪問它以更改標籤中的圖標?謝謝 – pie154 2009-08-06 23:27:22

+0

如果您想從同一類中的其他方法訪問,請不要使您的方法成爲靜態的。 – AlbertoPL 2009-08-06 23:52:22

+0

但如果我想要怎麼做從同一個班級和另一個班級訪問? – pie154 2009-08-07 07:56:20

0

只使用靜態方法或對象在任何類(如Clazz)當你想訪問它們,而無需創建一個對象(如Clazz c = new Clazz();)。舉例來說,如果我做一個靜態方法public static void staticMethod() {}和常規方法public void regularMethod() {},這是我如何訪問它們:

public class Clazz //A class with methods 
{ 
    public void regularMethod() 
    { 
    //Do something local 
    } 

    public static void staticMethod() 
    { 
    //Do something static 
    } 
} 

public class Main //The main class with the main method. 
{ 
    public static void main(String[] args) 
    { 
    Clazz.staticMethod(); 

    Clazz c = new Clazz(); 

    c.regularMethod(); 
    } 
} 

注意,我沒有叫Clazz.regularMethod();,因爲那是不可能的。我沒有打電話給c.staticMethod();,因爲那是糟糕的形式,儘管這是可能的。

總而言之,請儘量不要使用靜態對象,除非(A)是絕對必要的,或(B)有如果創建的標籤公開方式在任何時候任何情況下

相關問題