Frage

Ich habe eine Hauptklasse in einem Programm, das eine andere Klasse startet, die alle GUI Sachen behandelt. In der GUI, habe ich eine Schaltfläche, die ich brauche eine Action zu.

anhängen

Das einzige Problem ist, zu dem Code ausgeführt Bedürfnisse wird in der Hauptklasse befinden.

Wie kann ich die Methode actionPerformed () in der Hauptklasse auszuführen, wenn ein Knopf an anderer Stelle geklickt wird?

War es hilfreich?

Lösung

Machen Sie Ihre Controller ( „main“ Klasse), um den Action-Schnittstelle implementieren, dann einen Verweis auf die Ansichtsklasse übergeben:

public class View extends JFrame {
  public View(final ActionListener listener) {
   JButton button = new JButton("click me");
   button.addActionListener(listener);
   button.setActionCommand("do_stuff");

   getContentPane().add(button);

   pack();
   setVisible(true);
  }
 }

 public class Control implements ActionListener {

  public Control() {
   new View(this);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
   if (e.getActionCommand().equals("do_stuff")) {
    // respond to button click
   }
  }
 }

Es kann auch mit Aktionen durchgeführt werden , aber das ist mehr nützlich, wenn Sie ein Stück Code, mögen viele Tasten reagieren zu können.

Andere Tipps

Implementieren Sie eine anonyme innere Klasse als Action auf der Schaltfläche, ruft dann die Methode auf dem Hauptklasse. Dadurch entsteht weniger Abhängigkeiten und vermeidet den Tag & Schalter Stil Programmierung, dass auf einer Hauptklasse die Action Schnittstelle implementieren zu fördern neigt.

In jedem Fall wird es einen Zyklus in den Abhängigkeitsgraphen erstellen: die Hauptklasse weiß über die Taste und die Taste muß die Hauptklasse nennen. Dies könnte nicht eine gute Idee sein, da sie machen es schwer werden die Dinge auf andere Weise zu komponieren. Aber ohne weitere Informationen ist es schwer, die Situation zu beurteilen, oder etwas Konkretes empfehlen.

Action in der Hauptklasse implementieren und die Haupt-Klasseninstanz als Zuhörer auf GUI-Taste hinzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top