Frage

Ich habe ein Array voll von JLabels und möchte ihnen einen Zuhörer hinzufügen.

Der Hörer muss nicht genau wissen, auf welches geklickt wurde, nur dass einer war. Gibt es eine Möglichkeit, den Hörer dem gesamten Array hinzuzufügen, anstatt eine 'for ()' Loop zu verwenden?

Danke fürs Lesen.

War es hilfreich?

Lösung

Wenn Ihre Etiketten einem Container (wie einem jpanel) einen A -Hörer zu diesem Container hinzufügen und wissen, welche Komponente an einem bestimmten Ort liegt.

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

In diesem Fall verwende ich einen Mouselistener, da ich den Ort gibt, an dem der Benutzer geklickt hat.

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

};

Und druckt korrekt aus, auf welche Komponente geklickt wurde.

Der vollständige Quellcode ist hier

Andere Tipps

Nein, es gibt keine Lösung aus der Box, Afaik. Abgesehen von dummen Hacks müssen Sie möglicherweise eine für die Schleife verwenden, und es kann sich um einen 10 -Zeilen -Code handeln, worüber Sie sich keine Sorgen machen müssen.

Sie können Ihr Array von JLabels in einer Klasse einwickeln und Ihre eigene add () -Methode implementieren, die den Hörer beim Hinzufügen registriert.

Auf diese Weise müssten Sie danach nicht über sie iterieren.

Yyou kann den Hörer auf dem JPanel registrieren (oder in welcher Komponente die Schaltflächen), sodass Sie nur einen einzelnen Hörer schreiben müssen.

Wenn es eine Liste von JLabels wäre, würde ich vorschlagen, die Verwendung zu verwenden CollectionUtils.foralldo - Methode, mit der Sie die gleiche Aktion auf eine Reihe von Objekten anwenden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top