ActionEvent generieren und an ActionListener weiterleiten

123456789

Aktives Mitglied
Hallo,

eine Frage zu ActionEvents. Ich würde gerne inner halb einer actionPerformed() Methode einen ActionEvent generieren, welcher den Aufruf der actionPerformed() Methode eines anderen ActionListeners verursacht.

BeispielSource:
Java:
ActionListener1 implements ActionListener{
 public void actionPerformed(ActionEvent e) {
  ...
  if (Action.STH.equals(cmd)) {
    // do Sth.
  }
 }
}


Java:
ActionListener2 implements ActionListener{

  public void actionPerformed(ActionEvent e) {
    // create ActionEvent which will call ActionListener1.actionPerformed()
   // with the actionCommand Action.STH
  }
  
}


ist sowas überhaupt möglich?
In diesem Beispiel möchte ich mir nur die Source Duplizierung ersparen.

Vielen Dank,
LG
 

pl4gu33

Top Contributor
meinst du so ?
also gehen tut es, weiß aber nicht ob es eine tolle/saubere Lösung is ;)

Java:
public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame frame=new JFrame();
		 frame.setSize(400, 400);  		 
		 
		 JPanel panel=new JPanel();
		 JButton btn=new JButton("TEST");
		 btn.addActionListener(new Action1());
		 
		 
		 panel.add(btn);
		
		 frame.add(panel);
		 frame.setVisible(true);   		 
	}

Java:
package action;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Action1 implements ActionListener{
	private Action2 mAction2;
	public Action1(){
		mAction2=new Action2();
	}
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("ACTION1");
		
		mAction2.actionPerformed(arg0);
		
	}

}

Java:
package action;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Action2 implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("ACTION2");
	}

}
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
Ich würde gerne inner halb einer actionPerformed() Methode einen ActionEvent generieren, welcher den Aufruf der actionPerformed() Methode eines anderen ActionListeners verursacht.
...ist sowas überhaupt möglich?

Du brauchst lediglich eine Referenz auf den anderen Listener. Dann kannst Du darüber seine "actionPerformed"-Methode aufrufen, der Du das neue ActionEvent übergibst.

Gruß,
André
 

Marco13

Top Contributor
Nebenbei: Das klingt strukturell SEHR unschön. Warum soll in der actionPerformed mehr gemacht werden, als eine Methode aufzurufen? Also eher sowas wie
Java:
ActionListener1 implements ActionListener{
 public void actionPerformed(ActionEvent e) {
    doSomething1(e.getActionCommand());
 }
}

ActionListener2 implements ActionListener{
  public void actionPerformed(ActionEvent e) {
      doSomething(Action.STH);
  }
}

private void doSomething(String sommand)
{
  if (Action.STH.equals(command)) {
    // do Sth.
  }
}
oder so...
 

123456789

Aktives Mitglied
Danke für eure Antworten.

Leider hab ich keine Referenz auf den anderen ActionListener. Die von Marco13 beschriebene Auslagerung der Funktionalität hab zurzeit auch in Verwendung.
Ich hab nur gehofft dass es eineMöglichkeit für ein Redirect des ActionEvents gibt.

Vielen Dank,
LG
 

André Uhres

Top Contributor
Redirect des ActionEvents

Für einen Redirect musst Du die Richtung kennen, in die Du umleiten willst ;).

Wenn Du den Listener nicht kennst, musst Du zumindest das Subjekt kennen, das vom Listener beobachtet wird. Wenn das Subjekt eine Component ist, wäre z.B. ein [c]Component#dispatchEvent[/c] möglich. Vielleicht kannst Du aber auch über eine im Subjekt definierten Methode (wie z.B. [c]getActionListeners[/c]) auf den/die ActionListener zugreifen.

Gruß,
André
 
I

irgendjemand

Gast
ich würde hier grundlegend die struktur ändern ..

ich persönlich finde es nicht gerade "sauber" wenn man einem objekt über eine anonyme klasse einen listener zuweist ...

man sollte dann eher der klasse "implements ActionListener" mitgeben und dann beim adden [c]addActionListener(this)[/c] verwenden ...

so hat man eine zentrale methode von der aus man auch zugriff auf alle klassen- und instanz- objekte und methoden hat ...

aber ihr könnt mich gerne aufklären welchen "sinn" anonyme Listener haben ...
 

bERt0r

Top Contributor
Wenn deine View Klasse sämtliche EventListener Implementiert kann das schon mal den Rahmen sprengen. Ich würde nicht wollen z.B bei einem JTable, dass diese internen Listener Methoden nach aussen sichtbar sind.
Besonders in Bezug auf die Komposition vs Vererbung Debatte passt mMn genau hier die Vererbung schlecht, weil ja View und Controller was verschiedenes sein sollen.

Ich bin da eigentlich nicht festgelegt:
Ist der Code im Listener kurz -> annonymer Listener.
Ist der Code länger, bezieht sich aber nur auf die eine Komponente -> annonymer Listener, der Funktion aufruft.
Ist der Listener allgemeingültig oder steuert mehrere Objekte an -> eigene Listener Klasse
 
Zuletzt bearbeitet:
I

irgendjemand

Gast
ja ok .. geb mich geschlagen ... so macht das natürlich sinn ...
gerade in bezug auf vererbung *daran hab ich ja mal überhaupt nich gedacht xD*

aber da du MVC ansprichst : ist es nicht "besser" bzw "sauberer" wenn man im MVC-pattern die listener grundsätzlich komplett auslagert und diese in verbindung zum controller bringt ? *ja : davon abgesehen das die events natürlich über das view erzeugt werden ...*
 
G

Gast2

Gast
ich persönlich finde es nicht gerade "sauber" wenn man einem objekt über eine anonyme klasse einen listener zuweist ...

man sollte dann eher der klasse "implements ActionListener" mitgeben und dann beim adden [c]addActionListener(this)[/c] verwenden ...

Genau falsch herum
Eine anonyme Klasse ist "sauberer" als addXyzListener(this);
Weil sonst ist die View und der Controller(ActionListener) direkt miteinander verbunden.
Java:
 public class View implements ActionListener (Controller)
sagt doch schon alles aus
 
G

Gast2

Gast
aber da du MVC ansprichst : ist es nicht "besser" bzw "sauberer" wenn man im MVC-pattern die listener grundsätzlich komplett auslagert und diese in verbindung zum controller bringt ? *ja : davon abgesehen das die events natürlich über das view erzeugt werden ...*

Anonyme Listenner bzw. Controller sind vollkommen in Ordung. Wenn du für jeden Button extra den Controller auslagerst nur um ein oder 2 Methoden aufzurufen ist das einfach nur ein riesiger Aufwand.

Es macht Sinn wenn der Listener öfters wiederverwendet wird.
 
I

irgendjemand

Gast
ja klar .. so erklärt gibt das natürlich sinn *kenne mich mit MVC leider nicht so gut aus und schreibe sowas daher immer "dirty" ... werd ich mir auf jeden fall abgewöhnen*

das mit dem auslagern meinte ich eigentlich eher so das man ein listener *controller* für alle nimmt ...
also halt eine klasse für alle ActionListener ...

das es nicht schlau ist wirklich jeden listener in seine eigene klasse auszulagern ist mir selbst klar ... war ja aber auch nicht das was ich ausdrücken wollte ...
 
G

Gast2

Gast
ja klar .. so erklärt gibt das natürlich sinn *kenne mich mit MVC leider nicht so gut aus und schreibe sowas daher immer "dirty" ... werd ich mir auf jeden fall abgewöhnen*
Musst mal schauen hier hats jede Menge Beispiele im Forum...

das mit dem auslagern meinte ich eigentlich eher so das man ein listener *controller* für alle nimmt ...
also halt eine klasse für alle ActionListener ...

Das wird aber sehr schnell unübersichtlich und unnötig komplex

EDIT:
Hier findest eigentlich alles ;)
http://www.java-forum.org/awt-swing-swt/128242-mvc-anfaengen-2.html
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S ActionEvent Press Enter per Code auslösen AWT, Swing, JavaFX & SWT 22
B JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse AWT, Swing, JavaFX & SWT 2
M JavaFX ActionEvent Button AWT, Swing, JavaFX & SWT 6
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
S JavaFX Unterschied MouseEvent und ActionEvent AWT, Swing, JavaFX & SWT 3
KilledByCheese Event Handling Vom ActionEvent auf String zugreifen - genaueres in der Beschreibung AWT, Swing, JavaFX & SWT 3
G Swing Durch GlassPane auf Button klicken und ActionEvent auslösen AWT, Swing, JavaFX & SWT 0
K Ereignisbehandlung, ActionListener, ActionEvent AWT, Swing, JavaFX & SWT 3
T Fehler bei ActionEvent? AWT, Swing, JavaFX & SWT 3
P ActionEvent wird nicht verarbeitet AWT, Swing, JavaFX & SWT 4
X AWT ActionEvent wirft NullPointerExpection Warum? AWT, Swing, JavaFX & SWT 42
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
J JavaFX ActionEvent AWT, Swing, JavaFX & SWT 8
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
M Swing ActionEvent soll von Anderem ActionEvent abhängen AWT, Swing, JavaFX & SWT 3
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
L JFrame größe in einem ActionEvent ändern AWT, Swing, JavaFX & SWT 4
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
M Arbeiten mit actionPerformed(ActionEvent) oder Alternative AWT, Swing, JavaFX & SWT 7
N Aufgabe: ActionEvent - Abfrage AWT, Swing, JavaFX & SWT 7
N Problem mit ActionEvent - Abfrage AWT, Swing, JavaFX & SWT 10
Dit_ Objekt mit ActionEvent übergeben AWT, Swing, JavaFX & SWT 2
B JFreeChart Balkendiagramm ActionEvent AWT, Swing, JavaFX & SWT 2
kirchrath Swing Aus ActionEvent Objekt herausfinden auf dem er ausgeführt wurde AWT, Swing, JavaFX & SWT 4
T JTable durch ActionEvent befüllen AWT, Swing, JavaFX & SWT 3
B ActionEvent Dateipfad als String übergeben AWT, Swing, JavaFX & SWT 11
M Frage zu ActionEvent? AWT, Swing, JavaFX & SWT 4
P KeyEvent methode an actionEvent methode weiterleiten AWT, Swing, JavaFX & SWT 5
M Eigenes ActionEvent / Eigener Listener AWT, Swing, JavaFX & SWT 2
G ActionEvent richtig anbringen AWT, Swing, JavaFX & SWT 7
C JButton-Name per ActionEvent rausfinden AWT, Swing, JavaFX & SWT 2
P actionlistener und actionevent AWT, Swing, JavaFX & SWT 2
M ActionEvent löst nicht aus AWT, Swing, JavaFX & SWT 4
T actionevent an modalen dialog AWT, Swing, JavaFX & SWT 5
L eigene Komponente, ActionEvent senden? AWT, Swing, JavaFX & SWT 3
M ActionEvent manuell senden AWT, Swing, JavaFX & SWT 7
S Neubaufbau eines Tabelleninhalts bei actionEvent AWT, Swing, JavaFX & SWT 4
H LayoutManager RPG Programmieren, eigenes Spielfeld grafisch generieren aus Tileset AWT, Swing, JavaFX & SWT 18
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
S Aus XML Datei FXML generieren AWT, Swing, JavaFX & SWT 4
U Swing Buttons generieren AWT, Swing, JavaFX & SWT 19
A AWT Nach dem generieren von bildern verschwinden diese wieder AWT, Swing, JavaFX & SWT 9
L ID für GUI Elemente generieren AWT, Swing, JavaFX & SWT 11
S SWT Bei Auslösen eines Buttones ein Textfeld generieren AWT, Swing, JavaFX & SWT 2
M Dynamisches generieren und ausrichten von Komponenten AWT, Swing, JavaFX & SWT 11
N Bilder aus Infos generieren lassen. Welches Framework? AWT, Swing, JavaFX & SWT 8
D AWT Netzwerkadresse generieren! Help?! AWT, Swing, JavaFX & SWT 35
X Video's aus JPG's oder BufferedImages generieren AWT, Swing, JavaFX & SWT 3
P Formular mit n-Textfeldern generieren AWT, Swing, JavaFX & SWT 7
O Fensterinhalt löschen und neu generieren AWT, Swing, JavaFX & SWT 2
G Mousecursor selber dynamisch generieren. AWT, Swing, JavaFX & SWT 6
F Bildleiste generieren AWT, Swing, JavaFX & SWT 2
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
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

Ähnliche Java Themen

Neue Themen


Oben