Wie kann man eine Methode aus einer anderen Klasse mit einem Button verbinden?

2 Antworten

Erstelle eine Instanz dieser anderen Klasse und übergib sie an deine. Hierfür gibt es verschiedene Wege.

a) Die Instanz wird in deiner Klasse (z.B. im Konstruktor) erstellt:

class OtherClass {
  public void doSomething() {
  }
}

class MyClass {
  private OtherClass other;

  public MyClass() {
    other = new OtherClass();
  }
}

Da ein Feld (other) auf das erzeugte Objekt zeigt, kannst du nun in jeder Instanzmethode der Klasse die doSomething-Methode aufrufen.

b) Eine Instanz der anderen Klasse wird an deine Klasse als Argument übergeben. Das kann erneut über den Konstruktor oder irgendeine Setter-Methode laufen.

class OtherClass {
  public void doSomething() {
  }
}

class MyClass {
  private OtherClass other;

  public MyClass(final OtherClass other) {
    this.other = other;
  }
}

// main:
OtherClass otherClass = new OtherClass();
MyClass myClass = new MyClass(otherClass);

Hierbei wird die Referenz auf das Objekt wieder mit einem Feld (other) gespeichert. Wenn das Objekt aber nur in dem Kontext (Konstruktor/Methode) benötigt wird, welcher es via Parameterübergabe empfängt, braucht man natürlich kein extra Feld.

Zusammengenommen könnte ein Beispiel in Swing nun folgendermaßen aussehen:

class MyHandler {
  public void doSomething() {
    /* ... */
  }
}

class MyWindow {
  public MyWindow(final MyHandler handler) {
    var frame = new JFrame("My Window");
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    var button = new JButton("Click me");
    button.addActionListener(event -> handler.doSomething());
    button.setPreferredSize(new Dimension(200, 50));
    frame.add(button);

    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);    
  }
}

public class Main {
  public static void main(String[] args) {
    SwingUtilities.invokeLater(() -> {
      var handler = MyHandler();
      new MyWindow(handler);
    });
  }
} 

Entweder du hast eine Instanz (ein Objekt) der Klasse erzeugt die die Methode die du ausführen willst beinhaltet, dann kannst du die Methode sofern sie public ist ja einfach mit Objekt.Methode() ausführen.

Oder deine aktuelle Klasse mit dem jFrame ist eine Unterklasse der Klasse die deine Methode beinhaltet (bspw mit "extends"). Dann kannst du die Methode direkt mit methode() aufrufen.

Oder du hast die Methode als static deklariert und kannst sie dann einfach mit Klasse.Methode() aufrufen

Falls du was nicht verstehst oder konkrete Beispiele brauchst kannst du dich gern melden :)


gamer23556 
Beitragsersteller
 01.01.2025, 19:07

Was meinst du mit Objekt

Taroc  01.01.2025, 19:08
@gamer23556

Habt ihr noch nie über Objektorientierung gesprochen?

gamer23556 
Beitragsersteller
 04.01.2025, 16:17
@Taroc

Ich habe eine Methode hinzufuegegen und sie soll nach dem Drücken des Knopfes ausgeführt werden. Kann ich dann so schreiben.

  public void hinzufuegen_ActionPerformed(ActionEvent evt) {
         PokemonTrainer.hinzufuegen();
    
  }
Taroc  04.01.2025, 16:31
@gamer23556

Prinzipiell ja, jetzt weiß ich aber natürlich nicht was PokemonTrainer ist