2014-09-19 1 views
0

Я создаю JLabel в одном методе, и я хотел бы получить к нему доступ в моем ItemListener. Как я могу сделать свой JLabel «Public static»?Как создать JComponent Global

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 = новый JLabel («Это билет»); в классе. Но сначала подумайте о своем дизайне. –

+2

Хотя комментарий @ SuchithaThilinaDayaratne и ответ Matthijs имеют ответ, который вы ищете, на самом деле вам не нужно использовать public static для этого случая, потому что вы получаете его от самого ItemListener. Если у вас будет два MainTicketPrinter, вы можете столкнуться с этой статической переменной. – Daniel

ответ

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

+0

@ user3458556 Объявление чего-то на уровне класса должно выполняться, если все объекты, которые являются частью этого класса, имеют общее свойство, например, если вы хотите распечатать все билеты одного цвета, тогда, если имеет смысл удерживать этот цвет в класса. Любое другое свойство, которое ** зависит от объекта **, должно быть объявлено для каждого объекта индивидуально, то есть без 'static'. – Daniel

+0

Спасибо, что действительно полезная информация. Но это скажет мне, что его нельзя объявлять на уровне класса, так как я хочу только, чтобы определенная метка для определенного билета. Но если я объявлю это в методе, я не могу получить к нему доступ в itemListener. Может ли быть способ «itemStateChaged» внутри метода ticket()? – user3458556