Reihenfolge von Actions mit Abgeleiteter Klasse

holtiwilan

Mitglied
Hallo.
Ich habe folgendes Problem:
Ich habe eine abgeleitete Klasse von z.B. JButton mit einem eingenen ActionListener:
Code:
import javax.swing.JButton;

public class MyButton extends JButton {
	private static final long serialVersionUID = 1L;
	public MyButton(){
	this.addActionListener(new java.awt.event.ActionListener() {
		public void actionPerformed(java.awt.event.ActionEvent e) {
			System.out.println("1");
		}
	});
	}
}
Dann benutze ich diese Klasse für einen Button und möchte einen weiteren ActionListener Implementieren, der aber nach dem in der Klasse ausgeführt wird.
Code:
/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new MyButton();
			jButton.setText("drück mich");
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("2"); // TODO Auto-generated Event stub actionPerformed()
				}
			});
		}
		return jButton;
	}
Mein Problem ist jetzt, das ich ja beim Klicken auf den Button die Ausgabe:
1
2

erwarte, aber es wird
2
1

ausgegeben.

Kann ich die Reihenfolge, in der die Actions ausgeführt werden irgendwie beeinflussen?

Vielen Dank

Tim
 
Moin!
Das Problem an der Sache ist, dass beim Abfeuern eines ActionEvents die zuletzt registrierten ActionListener als erstes aufgerufen werden.
Aber wenn du wirklich nur die 2 ActionListener registrieren willst, und diese immer in der dir geforderten Reihenfolge aufgerufen werden sollen, ist die Lösung nicht sehr aufwendig:
Code:
public class MyButton extends JButton {
    private static final long serialVersionUID = 1L;
    public MyButton(){
        
    }
    
    public void addActionListener(ActionListener l){
        super.addActionListener(l);
        super.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent e) {
            System.out.println("1");
        }
    });
    }
}
Code:
MyButton butt1 = new MyButton();
        butt1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                System.out.println("2"); // TODO Auto-generated Event stub actionPerformed()
            }
        });
Ausgabe:
Code:
1
2

Möchtest du noch mehr ActionListener hinzufügen und explizit angeben können, in welcher Reihenfolge die ActionListener aufgerufen werden sollen, musst du die ActionListener in einer eigenen Liste mit dem gewünschten index speichern, und die fireActionPerformed() Methode dann entsprechend überschreiben.. Wenns dazu Fragen gibt, einfach nochmal nachfragen...

*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Zurück