Wie kann man eine Methode aus einer anderen Klasse mit einem Button verbinden?
Hallo, ich muss für die Schule ein jFrame programmieren, dafür will ich, dass ein Button eine Methode aus einer anderen Klasse ausführt, wenn er gedrückt wird. Jetzt ist meine Frage, wie ich das mache.
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 :)
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();
}
Prinzipiell ja, jetzt weiß ich aber natürlich nicht was PokemonTrainer ist
Was meinst du mit Objekt