ActionListener pragmatischer Ansatz gesucht

Status
Nicht offen für weitere Antworten.

FenchelT

Bekanntes Mitglied
Hallo zusammen,

normalerweise, wenn ich ein GUI mit zwei oder drei Button habe, arbeite ich mit innere Klassen wobei jede Klasse einen eigenen ActionListener implementiert.

Beispiel:

Code:
public class MyTest
{
   private JButton btnSpeichern;

      public MyTest()
      {
            initComponents();
      }

      private void initComponents()
      {
           btnSpeichern = new JButton("Speichern);
           btnSpeichern.addActionListener(new btnSpeichernListern());
      }


      class btnSpeichernListener implements ActionListener
      {
           public void actionPerformed........usw
      }

}

So habe ich die Moeglichkeit jedem Button seinen eigenen Listener zuzuweisen und muss nicht mittels
if (event.getActionCommand......) pruefen, welcher Button gedrueckt wurde, weil ich das nicht gerade performant finde.

Nun habe ich allerdings das Problem, dass ich eine GUI mit 20 Schaltflaechen habe.

Wie macht ihr sowas, wenn mehrere Schaltflaechen auf der GUI sind.
Prueft ihr alle mit if() ab und wenn ja, wie wirkt sich das auf die Performance aus, oder arbeitet ihr auch mit inneren KLassen oder wie macht ihr das?


Vielen Dank und viele Gruesse
FenchelT
 

Marco13

Top Contributor
"Das kommt drauf an" :wink:

Ich finde normalerweise anonyme Listener recht praktisch - also nicht
Code:
btnSpeichern.addActionListener(new btnSpeichernListern());

class btnSpeichernListener implements ActionListener
{
           public void actionPerformed........usw
}
sondern
Code:
btnSpeichern.addActionListener(new ActionListener()
{
           public void actionPerformed........usw
});
In der actionPerformed kann man dann (je nachdem, was dort gemacht werden soll) u.U. nur eine einzige, private Methode aufrufen. (Das erinnert vom Konzept her an die "Slots" von QT). Jedenfalls finde ich das am flexibelsten: Wenn man will, kann man dann die "umschließende" Klasse zum ActionListener machen, und ruft in der ActionPerformed einfach die gleiche private Methode auf, oder man lagert die private Methode in eine eigene Klasse aus, die ein ActionListener ist, und hängt DEN dan an den Button. Beide "Richtungen" sind mit ca. 3 Zeilen code erledigt.
 

FenchelT

Bekanntes Mitglied
Hallo Marco,

danke erstmal fuer Deinen Post.

Marco13 hat gesagt.:
"Das kommt drauf an" :wink:

Wenn man will, kann man dann die "umschließende" Klasse zum ActionListener machen, und ruft in der ActionPerformed einfach die gleiche private Methode auf, oder man lagert die private Methode in eine eigene Klasse aus, die ein ActionListener ist, und hängt DEN dan an den Button. Beide "Richtungen" sind mit ca. 3 Zeilen code erledigt.


Ehrlich gesagt stehe ich im Moment ein wenig auf dem Schlauch, was Du mir damit sagen willst :roll:


Natuerlich haben anonyme Listener einen gewissen Charme, aber ich mache mir ein paar Gedanken hinsichtlich der Performance. In einer annon. Listener Klasse muss ich ja mit if(event.getActionCommand.....) pruefen,
welcher Button gedrueckt wurde und da ich noch nicht in die Verlegenheit gekommen bin, ueber 20 Button auf einer
GUI anzusprechen und habe halt wie gesagt bedenken was die Performance angeht.
Hast Du da evtl. Erfahrungen?

Vllt sagt ihr mir ja auch uebereinstimmend, "....mensch die Kisten sind heute so schnell, da brauchst Du Dir keine Gedanken mehr ueber die Performance zu machen" :?: :!:

Moechte halt nicht erst die Erfahrung machen, wenn ich alles in eine KLasse gepackt habe und dann merke, verdammt, zu langsam.

Auf der anderen Seite moechte ich mir auch ungern die ganze Tiparbeit mit den inneren Klassen machen, wenn es mit einer Klasse und >20 if() auch performant laeuft.


Danke nochmals fuer DEine Unterstuetzung.
 

Marco13

Top Contributor
FenchelT hat gesagt.:
Vllt sagt ihr mir ja auch uebereinstimmend, "....mensch die Kisten sind heute so schnell, da brauchst Du Dir keine Gedanken mehr ueber die Performance zu machen" :?: :!:
Zumindest ich sage das - in gewisser Hinsicht. Was sowas angeht braucht man sich um die Performance auf keinen Fall Gedanken zu machen. Bis die Schallwellen vom Klicken der Maus das Ohr des Anwenders erreichen, hat der Computer vielleicht schon 100 Stringvergleiche gemacht :wink: Aber ich finde solche ewig langen if-elseif-Konstrukte mehr als häßlich und unübersichtlich.

In einer annon. Listener Klasse muss ich ja mit if(event.getActionCommand.....) pruefen, welcher Button gedrueckt wurde

Nein, genau das eben nicht. Jeder Button kann ja seinen eigenen, kleinen Listener haben, der NUR auf diesen einen Button hört
Code:
button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { machWasFürButton1(); }});
button2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { machWasFürButton2(); }});
button3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { machWasFürButton3(); }});

Die "machWasFürButtonX()" sind dann eben die besagten privaten Methoden. Man hat also nicht eine riesige actionPerformed mit vielen if-elseif-Anweisungen, sondern einen Button, der mit einer "einzigen" Zeile mit einer bestimmten Funktionalität verknüpft wird. Die Verbindung zwischen dem Button und dem, was der Button wird damit i.a. genau dort hergestellt, wo auch der Button erstellt wird, und ohne irgendwelche Abfragen. Es KANN zwar auch Fälle geben, wo andere Konstrukte auch OK sind, aber ich persönlich finde das so ziemlich praktisch - flexibel, übersichtlich und leicht wartbar. Nachteile würden mir jetzt nicht einfallen. Außer vielleicht, dass es schöner wäre, nicht
Code:
button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { machWasFürButton1(); }});
schreiben zu müssen, sondern vielleicht sowas wie
Code:
button1.setActionMethod("machWasFürButton1()");
aber das ginge nur mit übelsten Reflection-Hacks :wink:
 

FenchelT

Bekanntes Mitglied
Moin Marco,

wusste doch, dass ich DIch nicht richtig verstanden hatte :wink:
Danke fuer das Beispiel, ueber die MOeglichkeit hatte ich nich so noch gar nicht nachgedacht ???:L

Auf jeden Fall gefaellt mir diese Loesung sehr, werde ich dankend uebernehmen :)


Danke nochmals fuer Deine Unterstuetzung.

Schoenen Tag noch
und viele Gruesse
FenchelT
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
L actionListener für Button AWT, Swing, JavaFX & SWT 97
R Actionlistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
R ActionListener in Actionlistener AWT, Swing, JavaFX & SWT 6
S Swing Variable in Actionlistener aufrufen AWT, Swing, JavaFX & SWT 10
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
coolian ActionListener funktonirt nicht richtig auf JMenuItem AWT, Swing, JavaFX & SWT 4
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
Blender3D einzelner ActionListener vs anonyme ActionListener AWT, Swing, JavaFX & SWT 10
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16
J ActionListener bei Buttons AWT, Swing, JavaFX & SWT 14
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
it_is_all ActionListener umlenken/ updaten mit AddActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 3
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
F "ActionListener" funktioniert nicht AWT, Swing, JavaFX & SWT 4
Z ActionListener Variable übergeben AWT, Swing, JavaFX & SWT 12
T JProgressbar während actionListener updaten AWT, Swing, JavaFX & SWT 1
S While Schleife im Actionlistener AWT, Swing, JavaFX & SWT 1
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
T ActionListener nimmt JTextField nicht mehr an. AWT, Swing, JavaFX & SWT 2
P ActionListener Graphics Einbauen AWT, Swing, JavaFX & SWT 0
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
Liondary GUI - ActionListener AWT, Swing, JavaFX & SWT 7
J ActionListener erkennt Variable nicht AWT, Swing, JavaFX & SWT 6
E ActionListener führt falsche Funktion aus AWT, Swing, JavaFX & SWT 6
Sin137 ActionListener in MVC AWT, Swing, JavaFX & SWT 7
M ActionListener und mathematische Methoden AWT, Swing, JavaFX & SWT 13
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
Paul15 ActionListener Variablen AWT, Swing, JavaFX & SWT 13
Y ActionListener AWT, Swing, JavaFX & SWT 2
K Ereignisbehandlung, ActionListener, ActionEvent AWT, Swing, JavaFX & SWT 3
A Gui für Vokabeltrainer (ActionListener) AWT, Swing, JavaFX & SWT 14
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
J Event Handling JOptionPane ActionListener setzen. AWT, Swing, JavaFX & SWT 3
S ActionListener Klasse aufrufen AWT, Swing, JavaFX & SWT 4
R Swing Problem: IOException bei ActionListener AWT, Swing, JavaFX & SWT 1
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
T Einfaches Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
K GUI, Button, ActionListener - ein paar Einsteigerprobleme AWT, Swing, JavaFX & SWT 1
W Verschachtelter ActionListener AWT, Swing, JavaFX & SWT 0
N gewünschte ActionListener bei RadioButton mit isSelected geht nicht AWT, Swing, JavaFX & SWT 2
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
K Swing JMenu und ActionListener AWT, Swing, JavaFX & SWT 4
A Swing ActionListener AWT, Swing, JavaFX & SWT 8
V ActionListener Abhängigkeitenproblem AWT, Swing, JavaFX & SWT 6
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
J ActionListener für Buttons AWT, Swing, JavaFX & SWT 3
M Event Handling ActionListener übergeben ich checks net AWT, Swing, JavaFX & SWT 4
C Swing ComboBox - ActionListener deaktivieren AWT, Swing, JavaFX & SWT 2
S Button (ActionListener) funktioniert nicht, wenn y-Koordinate verändert wird AWT, Swing, JavaFX & SWT 5
L Swing ActionListener führt seine Aufgabe nur teilweise aus. AWT, Swing, JavaFX & SWT 7
A Swing ActionListener kann nicht hinzugefügt werden AWT, Swing, JavaFX & SWT 4
P Actionlistener - 3 klassen - kompliziert - auf methoden zugreifen AWT, Swing, JavaFX & SWT 3
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
D AWT eigenem Knopf ActionListener zuweisen AWT, Swing, JavaFX & SWT 24
E Wert aus ActionListener geben AWT, Swing, JavaFX & SWT 4
J ActionListener per Innere Klasse oder e.getActionCommand() if-Abfrage? AWT, Swing, JavaFX & SWT 12
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
P Swing Seltsames ActionListener-Verhalten AWT, Swing, JavaFX & SWT 7
Oliver530 ActionListener von eigener ButtonKlasse AWT, Swing, JavaFX & SWT 16
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 2
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 3
C In der Schleife ActionListener aktivieren AWT, Swing, JavaFX & SWT 3
B Swing Problem beim ActionListener AWT, Swing, JavaFX & SWT 5
P Swing JPanel mit ActionListener mehrfach verwenden AWT, Swing, JavaFX & SWT 8
1 ActionEvent generieren und an ActionListener weiterleiten AWT, Swing, JavaFX & SWT 12
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
N JCombobox und Actionlistener Aktion nur ausführen, wenn Useraktion ihn auslöst AWT, Swing, JavaFX & SWT 4
N Componente und Actionlistener AWT, Swing, JavaFX & SWT 5
C ActionListener AWT, Swing, JavaFX & SWT 6
Corben ActionListener Error AWT, Swing, JavaFX & SWT 2
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
I Swing Problem mit InputMap bei JButton (ActionListener) AWT, Swing, JavaFX & SWT 3
S Swing JButton mit ActionListener innerhalb einer JTable AWT, Swing, JavaFX & SWT 4
P Variablen in einem ActionListener zurücksetzen AWT, Swing, JavaFX & SWT 6
M AWT Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
A Swing Bug in Swing? Wenn checkbox disabled reagiert ActionListener nicht AWT, Swing, JavaFX & SWT 5
S ActionListener "nach oben weitergeben" AWT, Swing, JavaFX & SWT 10
M Anonymer ActionListener AWT, Swing, JavaFX & SWT 4
L SWT Actionlistener Combobox öffnen AWT, Swing, JavaFX & SWT 4
S MenuBar ActionListener Event ... AWT, Swing, JavaFX & SWT 6
B Swing Formular mit mehreren Elementen - wie die ActionListener-Verarbeitung lösen? AWT, Swing, JavaFX & SWT 2
M getSource() findet Button nicht - ActionListener AWT, Swing, JavaFX & SWT 4
S Swing mit ActionListener auf Objekte einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben