ActionListener und GUI trennen

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hallo,

Ich möchte die Actionlistener für die Einzelnen Componenten (JButton, JLabel usw) und die GUI selber in zwei verschiedenen Klassen haben.
Kann mir da jemand einen Ansatz geben wie ich das am Besten machen könnte bzw. wie diese zwei Klassen dann miteinander kommunizieren.

Vielen Dank

lg
Michael
 
hi, das ist im prinzip recht einfach. es gibt in swing ja das prinzip der actions. also du machst sowas in der art:

Code:
class MyAction extends AbstractAction{

    public void actionPerformed(ActionEvent e){
        String s = getValue("test");
        System.out.println(s);
    }
}

so, das ist jetzt deine action, schön gekapselt und wiederverwendbar, da sie an so ziemlich alle swing komponenten gehängt werden kann. dafür gibts die methode setAction(action).

Code:
button.setAction(new MyAction());
button.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){
        Object src = e.getSource();
        Action action = ((JButton)src).getAction();
        action.putValue("test", "Hallo Welt");
    }

});

in der action passiert also alles. und das ist auch gut so 🙂. schau dir in diesem zusammenhang auch mal das MVC prinzip an.

als praktisches beispiel mal eine exit action:

Code:
class ExitAction extends AbstractAction{

    public void actionPerformed(ActionEvent e){
        System.exit(-1);
    }
}

die kannste dann an dein menu oder/und einen exitbutton hängen. man kann das natürlich noch mit einer abfrage 'Wirklich beenden?' etc erweitern.

grüße
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben