2014-09-19 64 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