2014-09-19 3 views
0

Je crée un JLabel dans une méthode et je voudrais y accéder dans mon ItemListener. Comment puis-je rendre mon JLabel "Public static"?Comment faire 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

Si vous voulez juste faire cela, vous pouvez utiliser public static JLabel lblTicket = new JLabel ("Ceci est un ticket"); au niveau de la classe. Mais pensez d'abord à votre conception. –

+2

Alors que le commentaire de @ ThusithaThilinaDayaratne et Matthijs answer ont la réponse que vous recherchez, vous n'avez pas besoin d'utiliser public static pour ce cas, car vous y accédez à partir de ItemListener lui-même. Si vous avez deux MainTicketPrinter, vous pouvez avoir des problèmes avec cette variable statique. – Daniel

Répondre

0

Cela devrait fonctionner:

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); 
    } 
} 

edit: Je ne sais pas, mais peut-être il est possible d'accéder à l'élément throug l'événement qui est appelé?

+0

Waht si j'ai plus de 200 JComponents, est-ce toujours une bonne pratique de tous les déclarer au niveau de la classe? – user3458556

+0

@ user3458556 Déclarer quelque chose au niveau de la classe doit être fait si tous les objets qui font partie de cette classe partagent cette propriété commune, par exemple si vous voulez imprimer tous les tickets avec la même couleur, alors s'il est logique de conserver cette couleur niveau de classe. Toute autre propriété ** dépendante de l'objet ** doit être déclarée individuellement pour chaque objet, c'est-à-dire sans statique. – Daniel

+0

Merci c'est très utile. Mais cela me dirait qu'il ne devrait pas être déclaré au niveau de la classe puisque je ne veux que cette étiquette pour un certain billet. Mais si je le déclare dans la méthode, je ne peux pas y accéder dans le ItemListener. Est-il possible d'avoir le "itemStateChaged" dans la méthode ticket()? – user3458556

Questions connexes