ActionListener + Swing
-
Hallo Zusammen,
Ich habe hier ein kleines Problem mit meinem ActionListener. Er wird von Buttons ausgelöst. Ich kann auch die Quelle des Events feststellen. Ich möchte einen String in eine JTextArea schreiben. Diese liegt allerdings in einem anderen JPanel. Gemeinsamer (Vater) der beiden Panels ist ein JFrame (im Beispiel haupt).
Hier ist mein ActionListener
public class MyActionListener implements ActionListener { private JTextArea display; private JButton button; private haupt app; /** Creates a new instance of MyActionListener */ public MyActionListener() { } public void actionPerformed(ActionEvent e) { //Button welcher gedrückt wurde System.out.println(e.getActionCommand()); //Quelle des Events button=(JButton)e.getSource(); //Hier geht es schief, Klasse haupt ist erbt JFrame elemente app=(haupt)button.getParent().getParent(); app.getDisplay().getAnzeige().setText(e.getActionCommand()); } }
Ich habe in einem Kommentar markiert wo das ganze schief geht. Ich hoffe das mir jemand weiterhelfen kann.
Vielen Dank.
helda
-
Warum das jetzt schief geht, weiss ich nicht, nehme aber mal an, dass Du eine ClassCastException bekommst?
Wie wäre es denn, wenn Du diesen Actionlistener als interne Classe definierst?
Also in der Art:public class MyFrame extends JFrame{ ... private JTextArea myTextArea = new JTextArea (); ... class MyActionListener implements ActionListener { ... public void actionPerformed(ActionEvent e) { ... myTextArea.setText(e.getActionCommand()); } } ... }
Damit kannst Du dann auf alle Variablen der Hauptklasse zugreifen.
Oder alternativ (welches ich bevorzugen würde), Du übergibst die JTextArea deinem Actionlistener im Konstruktor, in der Art:
public class MyActionListener implements ActionListener { private JTextArea display; /** Creates a new instance of MyActionListener */ public MyActionListener(JTextArea text) { this.display = text; } public void actionPerformed(ActionEvent e) { //Button welcher gedrückt wurde System.out.println(e.getActionCommand()); //Quelle des Events display.setText(e.getActionCommand()); } } //und in der Methode, wo Du die Listener initialisierst: ... button.addActionListener(new MyActionListener(myTextArea)); ...