2010-04-26 10 views
1

Je développe une application Java Desktop avec une interface graphique implémentée dans SWING. Je porte un JFrame. J'ai ajouté trois JPanel sur cela. Un JPanel panel1 a un bouton Démarrer. Maintenant, je veux désactiver divers composants sur d'autres JPanels quand un utilisateur appuie sur le bouton de démarrage sur le panneau1.Java Swing - Comment accéder à un composant JCanel d'un autre JPanel d'un autre JPanel, tous deux ajoutés au JFrame?

Maintenant, comment puis-je accéder aux composants de ces autres panneaux à partir de panel1.

Je sais qu'une approche est d'abord obtenir le conteneur de panel1

panel1.getParent(); 

ensuite obtenir les composants du conteneur

container.getComponents(); 

et de les utiliser selon le besoin.

Q1. Y a-t-il un autre moyen par lequel je peux effectuer la même tâche? (Je pense que c'est le seul moyen)

Q2. Après avoir obtenu la liste des composants du conteneur, comment différencier un conteneur avec l'autre?

Répondre

1

Vous pouvez effectuer des variables d'instance qui référencent les panneaux lorsque vous les créez et utilisez ces variables pour référencer les panneaux.

public class myFrame extends JFrame { 
    public static JPanel buttonPanel; 
    public static JPanel statusPanel; 

    public static void main(String[] args) { 
     buttonPanel = new JPanel(); 
    } 
} 
0

Je passerais des références aux autres panneaux dans le panneau avec le bouton de démarrage. Ou simplement avoir une méthode dans le conteneur qui fait exactement ce que vous voulez et appelle.

1

Je disposerais probablement d'une couche distincte de l'application - une qui contient des références aux divers panneaux et le bouton de démarrage - gérer cette action. Ainsi, lorsque le bouton Démarrer est cliqué, il appelle une méthode sur un type d'objet Controller; l'objet Controller, qui contient des références aux autres JPanel, désactive les autres composants.

1

Je voudrais ajouter un ActionListener de l'extérieur vers le bouton Démarrer:

StartPanel panel1 = ... 
JPanel panel2 = .... 

panel1.getStartButton().addActionListener(new ActionListener() {  
    public void actionPerformed(ActionEvent e) { 
    setEnabledTree(panel2, false); 
    } 
} 
Questions connexes