Action für JMenuItem/JButton UND windowClosingEvent

mas666

Mitglied
Hallo zusammen,

Ich möchte gerne beim Schliessen des Fensters die gleiche Action ausführen, wie beim klicken des entsprechenden menuItems.

Da ich sowohl mehrere JFrames , wie auch immer JButtonsund JMenuItems habe, die dieselbe Action ausführen, habe ich entsprechende Actions erstellt, die die Funktionen ausführen.

Die Actions werden zum Beispiel so eingebunden.

Java:
private Action actOpen;
actOpen = new OpenAction("Öffnen...",
                         Constants.IMAGE_OPEN_PROJECT,
                         "Öffnet ein Projekt.",
                         new Integer(KeyEvent.VK_O));

Die Klasse OpenAction erbt von AbstractAction und implementiert die actionPerformed(ActionEvent e)-Methode.

So weit, so gut. Die Menus und Toolbars der verschiedenen JFrames lassen sich so gut steuern.

Nun möchte ich aber beim folgenden Ereignis (Fenster wird durch 'x' oder ALT+F4 geschlossen) die selbe Aktion ausführen.

Java:
this.addWindowListener(new WindowAdapter() {
  @Override
    public void windowClosing(final WindowEvent we) {
      // Hier action aufrufen
    }
});

Irgendwie komm ich nicht drauf.

Wie macht man so etwas?
Ist das grundsätzlich der richtige Weg?

Ich kann keine Methode aufrufen, da in der Action eventuell noch andere Aktionen ausgeführt und dafür bin ich auf den ActionEvent angewiesen.

Danke für jeden Tipp!

Gruss
mas
 
Hallo,

ein guter Weg ist eigentlich, wenn der Code der ausgeführt werden soll nicht direkt in der Action/Listener steht, sondern in eine Methode ausgelagert wurde. Diese kann man dann immer aufrufen.

Gruß

Sascha
 
Hallo Sascha,

Danke für Deine Antwort. Siehe aber mein Post:

Ich kann keine Methode aufrufen, da in der Action eventuell noch andere Aktionen ausgeführt und dafür bin ich auf den ActionEvent angewiesen.

Ich habe eine Methode gefunden, finde Sie aber reichlich gebastelt...

Java:
this.addWindowListener(new WindowAdapter() {
	        @Override
			public void windowClosing(final WindowEvent we) {
	        	ActionListener al = new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent e) {
						menu.actExitPart.actionPerformed(e);
					}
	        		
	        	};
	        	JButton b = new JButton();
	        	b.addActionListener(al);
	        	b.doClick();
	        }
	     });

Ich erstelle also einen JButton und lasse ihn programmatisch klicken... Macht auf jeden Fall genau das was ich will...

Bessere Methoden oder eine Bestätigung, dass diese Variante nicht völliger Schwachsinn is (gerne mit Angabe von Gründen ;) ) wären nach wie vor erwünscht.

Gruss
mas
 
Ich kann keine Methode aufrufen, da in der Action eventuell noch andere Aktionen ausgeführt und dafür bin ich auf den ActionEvent angewiesen.

Das ist kein Grund.
Du brauchst vielleicht Informationen, die im ActionEvent-Object stehen, aber nicht das ActionEvent. Diese Parameter könntest du als Übergabe-Parameter der Methode definieren. Damit könntest du die Methode überall aufrufen.

Bessere Methoden oder eine Bestätigung, dass diese Variante nicht völliger Schwachsinn is (gerne mit Angabe von Gründen ) wären nach wie vor erwünscht.

Ein meiner Meinung nach guter Grund ist, dass es kein guter Programmierstil ist.

MFG

Sascha
 
Zurück