Action-listener

Status
Nicht offen für weitere Antworten.
M

michi2

Gast
Hi,
ich habe in meinen programm einen Action-listener an dem alle menue-items,etc. angemeldet sind.
Diese werden dan mit lauter if()-Bedingungen unterschieden und behandelt.
In zwischen hab ich dort jedoch über 80 if()-Bedingungen hintereinander!
Wäre es klüger mehere Action-listener zu verwenden???


Thanks
PS: ich habe das JDK 1.4
 

lin

Top Contributor
Wenn du die If-Bedingungen verschachtelst, könntest du vielleicht was an Performance rausholen...
z.B.
Code:
public void actionPerformed(ActionEvent ae) {
    	Object src = ae.getSource();
    	
    	if(src instanceof JButton) {
    
    	}
    	
    	if(src instanceof JMenuItem) {

    	}
    }
 

Sky

Top Contributor
1.) Also, wenn schon, dann bitte so:
Code:
public void actionPerformed(ActionEvent ae) {
  Object src = ae.getSource();
    	
  if(src instanceof JButton) {
    
  } else if(src instanceof JMenuItem) {

  }
}
Ansonsten wird auch für den JButton die if für JMenuItem durchlaufen, was in der Summe eher langsamer als schneller wird.

2.) Noch besser - m. E. aber immer noch nicht gut:
Code:
public void actionPerformed(ActionEvent ae) {
  Object src = ae.getSource();
   doIt( src );
}

private void doIt( Object arg ) {
}
private void doIt( JButton arg ) {
}
private void doIt( JMenuItem arg ) {
}

3.) Der Quelltext wird langsam unübersichtlich bei 1.) und 2.). Deshalb versuche mehrere Listener zu schreiben, welche thematisch zusammenpassende Aufgaben erledigen.
 
M

michi2

Gast
Danke!
Aber den vorschlag von 'AlArenal' versteh ich ehrlich gesagt nicht...
Bin noch nicht so weit.
 

AlArenal

Top Contributor
Na z.B. sowas:

Code:
    button_overview_zoom_in.addActionListener(new MyActionListener(MyActionListener.BUTTON_OVERVIEW_ZOOM_IN));

...

    class MyActionListener implements ActionListener {
        public static final int BUTTON_OVERVIEW_ZOOM_IN = 1;
        public static final int BUTTON_OVERVIEW_ZOOM_OUT = 2;
        public static final int BUTTON_PRINT = 3;
        public static final int BUTTON_REFRESH = 4;

        private int type;

        public MyActionListener(int type) {
            this.type = type;
        }

       public void actionPerformed(ActionEvent e) {
            switch (type) {
            
            case BUTTON_OVERVIEW_ZOOM_IN: 
                break;
            
            case BUTTON_OVERVIEW_ZOOM_OUT: 
                break;
            
            case BUTTON_PRINT: 
                break;
            
            case BUTTON_REFRESH: 
                break;

            default:
                log.error("unknown type : " + type); //$NON-NLS-1$

            }
        }
        
    }

Das halte ich für deutlich übersichtlicher und schneller, als irgendwelche verschachtelten if-Klamotten (mit/ohne instnaceof), nur um rauszubekommen, wo der Event nun eigentlich herkam.

Was deine Performance-Sorge bei einem ActionListener angeht, hängt es davon ab wie oft er aufgerufen wird und wie lange seine Abarbeitung dauert, ob es sich lohnt sich da wirklich nen Kopf drüber zu machen. Wenn ich irgendwo auf nen Knop drücke werde ich nicht merken, ob der Rechner das nun in 1 oder 5 hundertstel Sekunden ausführt...
 
B

Beni

Gast
Also ich weiss nicht AlArenal, da würde ich doch lieber mehrere ActionListener machen (dann hätte man weniger Code, weil das Typsystem unnötig wäre) :wink:

michi2, ein einzelner ActionListener benötigt nicht viel Speicher, und auch 80 Instanzen werden einen heutigen PC nicht weiter beeindrucken :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Action Listener Problem Allgemeine Java-Themen 3
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
Meeresgott Input/Output Polling mit (Action)-Listenern? Allgemeine Java-Themen 3
R Servelt mit <form action=""> aufrufen (.jsp) Allgemeine Java-Themen 7
X Action in Action aufrufen Allgemeine Java-Themen 2
T Button Action Allgemeine Java-Themen 10
S Action mehrmals klicken Allgemeine Java-Themen 3
N Action Events Allgemeine Java-Themen 12
I Action parallel abarbeiten Allgemeine Java-Themen 3
C Anfaenger Problem mit Action Handling. Allgemeine Java-Themen 2
berserkerdq2 Was heißt es mit FXML Listener zu setzen ind Buttons zu erstellen? Allgemeine Java-Themen 6
L Wie programmiert man einen Listener? Allgemeine Java-Themen 1
S Threads Serielle Schnittstelle mit Listener / Aufrufendes GUI Allgemeine Java-Themen 4
H Listener Verständnisproblem Allgemeine Java-Themen 5
S Key Listener mit Strg + s Allgemeine Java-Themen 12
K Threads Listener für Future finish Allgemeine Java-Themen 2
TheWhiteShadow Listener Reihenfolge Allgemeine Java-Themen 4
D Listener auf System.out.err / System.out.println Allgemeine Java-Themen 5
A Listener für constructor einer bestimmen Klasse Allgemeine Java-Themen 9
E Bild mit Listener einfügen Allgemeine Java-Themen 3
P Listener für Tastatureingaben ohne Focus Allgemeine Java-Themen 4
serjoscha WatchDog Thread und Listener Allgemeine Java-Themen 10
hdi Listener für Desktop-Veränderungen Allgemeine Java-Themen 7
T JTextField in Listener leeren Allgemeine Java-Themen 2
lenniii Listener & JList Allgemeine Java-Themen 3
K Key listener ohne Fokus aktiv behalten ? Allgemeine Java-Themen 12
G Code-Convention für Listener Allgemeine Java-Themen 2
T Observer vs Listener Allgemeine Java-Themen 18
S Listener Allgemeine Java-Themen 3
P Abstrakte Elternklasse als Listener Allgemeine Java-Themen 6
MQue KeyAction listener Allgemeine Java-Themen 2
M generische Listener Allgemeine Java-Themen 2
S Listener für Kalender Allgemeine Java-Themen 2
B Observer vs Listener (GUI-Programmierung) Allgemeine Java-Themen 5
J Listener für Ende eines Threads gesucht... Allgemeine Java-Themen 5
S Listener Implentierung bei Eingabe in Textfeld Allgemeine Java-Themen 2
G Objekt einer inneren Klasse als Listener Allgemeine Java-Themen 3
D Boolean Listener? Allgemeine Java-Themen 28
M Listener und Performance Allgemeine Java-Themen 9
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
G Listener auf aktuelles Datum / Uhrzeit Allgemeine Java-Themen 2
Escorter Eigenen Listener schreiben Allgemeine Java-Themen 3
E Gibt es so etwas wie einen Windows Listener? Allgemeine Java-Themen 6
T SelectionProvider und Listener Frage Allgemeine Java-Themen 14
I Listener, der zeitlich-periodisch aufgerufen wird Allgemeine Java-Themen 3
R Generische Listener und Sender Allgemeine Java-Themen 12
B Listener dynamisch setzen Allgemeine Java-Themen 6
A Listener Tastatur Allgemeine Java-Themen 3
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
D Thread vs Listener Allgemeine Java-Themen 6
K Listener einem Objekt hinzufügen Allgemeine Java-Themen 3
S Listener-Problematik in komplexem Projekt Allgemeine Java-Themen 2
I Listener/Event selber machen. Allgemeine Java-Themen 4
M Time Listener ? Allgemeine Java-Themen 2
Z Zwei Listener zwischen zwei Klassen Allgemeine Java-Themen 4
B statusbar update -> mit thread oder listener? Allgemeine Java-Themen 7
M Bean Listener hinzufügen und Methode später überschreiben Allgemeine Java-Themen 27
G Flavor-Listener Allgemeine Java-Themen 6
E Listener für Änderung der Fenstergröße Allgemeine Java-Themen 3
W Listener an ein beliebiges Objekt hänger, der mir Änderung Allgemeine Java-Themen 8
Z Problem beim Aufruf eines Listener? Allgemeine Java-Themen 4
A HILFE: subclass von Hashtable mit listener aufstellen Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben