Anzahl Event Listeners

T

Timeeh

Gast
Hallo!

Ich habe mich bisher nur wenige Stunden mit Java Swing beschäftigt und bin daher noch ziemlicher Anfänger!
Das nur mal so als Warnung vorne weg :)

Mich interessiert folgendes:
Angenommen ich habe ein GUI mit 4 Buttons, auf die ich reagieren will (z.B. in dem ich irgendeinen Text ausgebe).
Wie viele event listener kann ich dafür minimal und maximal benutzen?
Ich würde schätzen, dass ich minimal einen benutzen kann, indem ich einfach einen Eventlistener schreibe und mit allein Buttons registriere, der sich
mit getSource den Button holt, von dem die Aktion kam, und dann geeignet reagieren kann.
Weniger geht denke ich nicht, schließlich muss ich doch auf Buttonclicks reagieren.

Maximal würde ich jetzt sagen 4 Eventlistener, für jeden Button einfach einen eigenen. Bzw. theoretisch gingen auch unendlich viele, denn ich kann doch einfach event listener implementieren und registrieren die einfach nichts tun.

Was könnten nun Gründe sein, mehr oder weniger Eventlistener zu verwenden?

Danke,
euer Timeeh
 

Marco13

Top Contributor
Das hängt ein bißchen vom Zusammehang ab. Es gibt sicher auch Fälle, wo man einen Listener an mehrere Buttons hängt. Häufiger vielleicht sogar an mehrere "andere Components", wenn z.B. ein und dieselbe Aktion sowohl durch einen Menüeintrag als auch durch einen Button ausgelöst werden soll. (Speziell das würde man durch Actions lösen, soll nur ein verdeutlichendes Beispiel sein).

Ganz allgemein ist es aber NICHT empfehlenswert, mehrere (insbesondere nicht-verwandte) Aktionen in einem Listener zusammenzufassen: Wenn in der "actionPerformed" dann erstmal 20 Zeilen wie
if (source == buttonX) { ... }
else if (source == buttonY) { ... }
oder
if (actionCommand.equals("bla")) { ... }
else if (actionCommand.equals("blubb")) { ... }
stehen, wird das schnell unübersichtlich, und man verdengelt Dinge, die man eher getrennt halten sollte.

Der umgekehrte Fall, mehrere Listener an einem Button, kann schon eher vorkommen, und ist auch vollkommen OK: Wenn jemand mitkriegen will, ob ein Button geklickt wurde, registriert man ihn als Listener, und ob vorher schon 10 andere Listener da dran hängen, hat denjenigen nicht zu interessieren. Er will Events -> er kriegt Events.

Ich persönlich finde in vielen Fällen anonyme Listener praktisch, die NUR eine (i.a. private) Methode aufrufen - im Stil von
Java:
startButton.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        start();
    }
});

stopButton.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        stop();
    }
});

Damit kann man dort, wo der Button erstellt wird, dem Button auch eine klar definierte Funktion zuweisen. (Eigentlich sollte man auch das eher mit Actions machen, aber in einigen Fällen (und bei anderen Listener-Typen) passt dieses Muster schon ganz gut). Hat ein bißchen Ähnlichkeit mit den "Slots und Signals", wie sie in Qt verwendet werden - aber das nur nebenbei.
 
T

Timeeh

Gast
Hallo Marco!

Der einzige Grund warum man einen Listener nicht an mehrere Buttons hängen soll ist aber dann der, dass der "actionPerformed"-Block einfach unübersichtlich und zu lange wird?
Auf der anderen Seite spart man sich aber die Erstellung vieler Listener...
Ich bin noch nicht so ganz überzeugt..denn mein actionPerformed für die 4 Buttons ist denke ich noch gut lesbar :)
 
S

SlaterB

Gast
wenn der Listener aufwendiger wird, z.B. Zustand merkt wie Anzahl Klicks, oder ähnlich komische Dinge, dann kommen entsprechend mehr Überlegungen hinzu,

im einfachen häufigen Fall hat man aber wirklich nur die Frage zwischen mehreren Einzellistenern oder if/else im gemeinsamen, richtig
 

Marco13

Top Contributor
Ja, es klingt erstmal nach einer recht "unbedeutenden" Entscheidung - aber (ohne jetzt Buzzwords wie "Separation of concerns" verwenden zu wollen) : Mehrere Listener zu einem zusammenfassen ist vermutlich immer einfacher, als einen verwobenen Mega-Listener auseinanderzupflücken. Wenn ein Button in eine andere (GUI)-Klasse wandern soll kann der Aufwand dafür schon ~"nicht unerheblich" sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H automatische Anzahl der Spalten ermitteln -> geht nicht AWT, Swing, JavaFX & SWT 6
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
H TableView mit variabler Anzahl Spalten AWT, Swing, JavaFX & SWT 2
D Swing JSlider Tip Anzahl AWT, Swing, JavaFX & SWT 3
Hijo2006 Anzahl der Excelzeilen AWT, Swing, JavaFX & SWT 1
L Swing Variable Anzahl an JButtons AWT, Swing, JavaFX & SWT 7
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
K SWT DataBinding, Anzahl der Zeilen aktualisieren AWT, Swing, JavaFX & SWT 4
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
M Anzahl Frames in Taskleiste AWT, Swing, JavaFX & SWT 2
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
DEvent Swing JTextField Anzahl an sichtbaren Zeichen AWT, Swing, JavaFX & SWT 4
Y JTable mit großer Anzahl von Datensätzen AWT, Swing, JavaFX & SWT 3
G Swing JTextArea mit fester Anzahl Spalten! AWT, Swing, JavaFX & SWT 10
O Anzahl der Zeilen im TableViewer AWT, Swing, JavaFX & SWT 12
G JList mit einer großen Anzahl an Einträgen AWT, Swing, JavaFX & SWT 15
Airwolf89 Swing Anzahl der Tabellenspalten dynamisch setzen AWT, Swing, JavaFX & SWT 2
T entsprechende Anzahl an jCheckboxen in einer jTable AWT, Swing, JavaFX & SWT 5
M Problem mit Festsetzen der Anzahl ein reihen in einer JTable AWT, Swing, JavaFX & SWT 11
M Komponenten einer unbestimmten Anzahl und MouseListener AWT, Swing, JavaFX & SWT 4
J jTextarea Anzahl Zeichen in einer Zeile begrenzen AWT, Swing, JavaFX & SWT 2
S JList gibt nach Sortierung mit Collections keine Anzahl mehr AWT, Swing, JavaFX & SWT 3
B random anzahl an jTextFieldern einfügen AWT, Swing, JavaFX & SWT 2
J Große Anzahl von Comboboxen in Tabelle darstellen AWT, Swing, JavaFX & SWT 2
G Tabelle mit variabler Anzahl an Zeilen AWT, Swing, JavaFX & SWT 3
M JList mit unbestimmter Anzahl Panels füllen AWT, Swing, JavaFX & SWT 4
X JTable --> Anzahl der Spalten ändern AWT, Swing, JavaFX & SWT 8
S Anzahl ActionEvents (Strings in eine ArrayList einfügen) AWT, Swing, JavaFX & SWT 4
Juelin in javafx Event auslösen AWT, Swing, JavaFX & SWT 4
G Mouse Event in anderemm Event auslösen AWT, Swing, JavaFX & SWT 50
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
izoards Java FX Window Event SHOWING AWT, Swing, JavaFX & SWT 17
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
L JavaFX Ich suche das passende Textfield Event AWT, Swing, JavaFX & SWT 1
J CheckBoxListCell auf click event in listView reagieren AWT, Swing, JavaFX & SWT 1
W JavaFX Etwas Tabellenartiges + Cell-Content-Changed-Event (o.ä.) AWT, Swing, JavaFX & SWT 30
O Swing Event Dispatch Thread AWT, Swing, JavaFX & SWT 1
B Swing Windowbuilder Rückgabewert im Event AWT, Swing, JavaFX & SWT 3
Z Befehl Action Event Verlassen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
M JavaFX Absoluter Fokus während drag Event AWT, Swing, JavaFX & SWT 10
Pr0m3theus Animation nach Event AWT, Swing, JavaFX & SWT 6
K Event Handling ComboBox Event Handler AWT, Swing, JavaFX & SWT 7
Sugan Swipe Event? AWT, Swing, JavaFX & SWT 8
Tausendsassa Text changed event handler jTextField AWT, Swing, JavaFX & SWT 3
H Event Handling JavaFx - auf Event warten AWT, Swing, JavaFX & SWT 4
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
T Internes Event-handling in TextField/JTextField AWT, Swing, JavaFX & SWT 2
M Swing OnLoad-Event o. Ä. AWT, Swing, JavaFX & SWT 3
D Event Handling in Komplexen Anwendungen AWT, Swing, JavaFX & SWT 9
D Event Handling "Plötzlich" kein mouseMoved-Event AWT, Swing, JavaFX & SWT 2
A Minimalestopuhr: JLabel.setText() durch eigenes Event ändern AWT, Swing, JavaFX & SWT 6
J Swing JMenuItem-Event?? AWT, Swing, JavaFX & SWT 3
J Swing JTable-Event für einen Select?? AWT, Swing, JavaFX & SWT 3
A Mouse event und exit on close AWT, Swing, JavaFX & SWT 11
V Swing Custom JToggleButton in JTable - Click-Event geht erst beim zweiten Mal AWT, Swing, JavaFX & SWT 7
F Event Handling AWT, Swing, JavaFX & SWT 7
J Button Event nur einmal ausführen AWT, Swing, JavaFX & SWT 3
S SWT Shell durch Event in der Größe verändern AWT, Swing, JavaFX & SWT 7
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
T Callback vs. Event listener AWT, Swing, JavaFX & SWT 7
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
S MenuBar ActionListener Event ... AWT, Swing, JavaFX & SWT 6
A Swing JButton int im Event AWT, Swing, JavaFX & SWT 9
G Swing Onkeyup Event AWT, Swing, JavaFX & SWT 3
P Action Event abfangen etwas anders? AWT, Swing, JavaFX & SWT 2
3 Swing NullPointerException in AW Event-0? AWT, Swing, JavaFX & SWT 5
F Swing Auf JComboBox-Event erst NACH Auswahl reagieren AWT, Swing, JavaFX & SWT 8
P Swing Event das ausgelöst wird, sobald Änderung der Größe Abgeschlossen ist AWT, Swing, JavaFX & SWT 4
A Shift-Tab-Event auslösen AWT, Swing, JavaFX & SWT 5
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
W Swing Event bei Schließen des Fensters AWT, Swing, JavaFX & SWT 6
A Probleme mit dem KeyReleased-event AWT, Swing, JavaFX & SWT 3
J Doppelklick Event AWT, Swing, JavaFX & SWT 32
jueki Event bei Änderung der Spaltenbreite in einem JTable AWT, Swing, JavaFX & SWT 15
D jtabbedpane Event VOR tab-Wechsel AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Event Problem AWT, Swing, JavaFX & SWT 5
M JTree => Event Dispatching Error AWT, Swing, JavaFX & SWT 2
D Event in Fenster ausgeben + Observer + kein Plan AWT, Swing, JavaFX & SWT 2
H warum kann ich das focus event nicht abfangen ? AWT, Swing, JavaFX & SWT 5
X Den Wert von JSpinner setzen ohne Event AWT, Swing, JavaFX & SWT 3
H KeyUp-Event/Ereignis AWT, Swing, JavaFX & SWT 6
C Event Frage AWT, Swing, JavaFX & SWT 7
M Swing WindowListener -> Event abbrechen? AWT, Swing, JavaFX & SWT 2
K JToggleButton deaktivieren (komplettes event nehmen) AWT, Swing, JavaFX & SWT 2
R JTextField - Event bei jedem Buchstaben AWT, Swing, JavaFX & SWT 2
R WindowClosing Event - Schließen rückgängig machen? AWT, Swing, JavaFX & SWT 2
M Actionlistener ohne Event -.-?! AWT, Swing, JavaFX & SWT 2
O Probleme beim Zeichnen und AWT-Event-Queue-0 Exception AWT, Swing, JavaFX & SWT 5
D PropertyChangeListener Event auswertung AWT, Swing, JavaFX & SWT 7
O FlowLayout Button Event zuweisen? AWT, Swing, JavaFX & SWT 7
J remove() components bei event von JComboBox AWT, Swing, JavaFX & SWT 2
I event AWT, Swing, JavaFX & SWT 6
G Swing JFileChooser Event für neue Directory? AWT, Swing, JavaFX & SWT 5
X Checkboxen erstellt mit MouseClicked event AWT, Swing, JavaFX & SWT 10
Dragonfire Swing One componentResized Event AWT, Swing, JavaFX & SWT 14

Ähnliche Java Themen

Neue Themen


Oben