2014-09-19 67 views
0

我在一個方法中創建一個JLabel,我想在我的ItemListener中訪問它 。我怎樣才能讓我的JLabel「公共靜態」?如何使JComponent全球

public class MainTicketPrinter implements ItemListener{ 

    public static void main(String[] args) { 
     new MainTicketPrinter().ticket(); 
    } 

    public void ticket() { 
     JLabel lblTicket= new JLabel("This is a Ticket"); 
     lblTicket.addItemListener(this);  
    } 
    public void itemStateChanged(ItemEvent e) { 
     lblTicket.setVisible(true); 
    } 
} 
+0

如果你只是想做到這一點,你可以使用公共靜態JLabel lblTicket = new JLabel(「This is a Ticket」);在課堂上。但首先想想你的設計。 – 2014-09-19 09:02:00

+2

儘管@ThirtithaThilinaDayaratne的評論和Matthijs答案有你正在尋找的答案,但實際上你不需要在這種情況下使用公共靜態,因爲你正在從ItemListener本身訪問它。如果您將有兩個MainTicketPrinter,您可能會遇到該靜態變量的問題。 – Daniel 2014-09-19 09:06:25

回答

0

這應該工作:

public class MainTicketPrinter implements ItemListener{ 
    public static JLabel lblTicket; 

    public static void main(String[] args) { 
     new MainTicketPrinter().ticket(); 
    } 

    public void ticket() { 
     lblTicket= new JLabel("This is a Ticket"); 
     lblTicket.addItemListener(this);  
    } 

    public void itemStateChanged(ItemEvent e) { 
     lblTicket.setVisible(true); 
    } 
} 

編輯:我不知道,但也許它可以訪問該項目通過量被稱爲事件?

+0

Waht如果我有200多個JComponents,是否所有人都在課堂級別上聲明,仍然是一種好習慣? – user3458556 2014-09-19 09:12:32

+0

@ user3458556如果作爲該類的一部分的所有對象都共享該公共屬性(例如,如果要打印具有相同顏色的所有票據),則應該在類級別聲明某些內容,然後如果將該顏色保留爲職業水平。應該爲每個對象單獨聲明任何其他**屬性取決於**的屬性,即不帶'靜態'。 – Daniel 2014-09-19 09:17:15

+0

謝謝你真的有用的信息。但是這會告訴我,不應該在課堂上宣佈它,因爲我只想要某個特定票證的某個標籤。但如果我在方法中聲明它,我無法在itemListener中訪問它。有沒有辦法在ticket()方法中使用「itemStateChaged」? – user3458556 2014-09-19 09:28:05