Question

Je l'ai fait une gamme complète de JLabels et je voudrais ajouter un écouteur pour eux.

L'auditeur n'a pas besoin de savoir exactement où l'on a cliqué, juste que l'on était. Y at-il un moyen d'ajouter l'auditeur à l'ensemble tableau au lieu d'utiliser une boucle »pour ()?

Merci pour la lecture.

Était-ce utile?

La solution

Si vos étiquettes sont ajoutés un à un conteneur (comme un JPanel), vous pouvez ajouter un écouteur à ce conteneur et de savoir quel composant est à un certain endroit.

JPanel panel = new JPanel();
panel.addMouseListener( whichOneListener );
f.setContentPane( panel );

Dans ce cas, j'utilise un mouseListener parce que cela me donne l'endroit où l'utilisateur a cliqué.

private static MouseListener whichOneListener = new MouseAdapter() {
    public void mouseClicked( MouseEvent e ) {
        JComponent c = ( JComponent ) e.getSource();
        JLabel l  = ( JLabel ) c.getComponentAt( e.getPoint() );
        System.out.println( l.getText() );
    }

};

imprime correctement ce composant a été cliqué.

Le code source est

Autres conseils

Non, il n'y a pas de la solution de la boîte, autant que je sache. Outre l'utilisation de hacks stupides, je pense que vous pourriez avoir à utiliser une boucle, et il peut être un code de 10 ligne, rien à craindre.

Vous pouvez envelopper votre tableau de JLabels dans une classe et mettre en œuvre votre propre méthode Add () qui enregistre l'auditeur sur les ajouter.

De cette façon, vous n'auriez pas à itérer sur eux par la suite ..

Vous pouvez enregistrer l'auditeur sur le JPanel (ou tout autre composant, les boutons sont) alors il vous suffit d'écrire un seul auditeur.

Si elle était une liste de JLabels, je suggère d'utiliser CollectionUtils.forAllDo -. méthode qui vous permet d'appliquer une même action à un groupe d'objets

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top