Ich bin sehr neu in der Verwendung von JavaFX und habe einige Probleme mit JavaFX mit FXML. Ich erstelle ein Programm mit einer "Setup" -Schaltfläche, die beim Klicken öffnet ein neues Fenster mit den Einstellungen für die Verbindung (zu einem Arduino). Auf dem Menü befindet sich eine weitere Schaltfläche ("Connect"), die mit der Karte verbunden ist. Dies schließt das Fenster. Ich suche den Text der ursprünglichen "Setup" -Schaltfläche auf "disconnect" zu setzen, allerdings scheint es mir nicht möglich zu sein, auf die Schaltfläche aus dem "Setup-Fenster" zuzugreifen. Jedes Mal, wenn ich auf „connect“ Ich erhalte die folgenden Fehler:Wie ändern Sie den Text in einer Schaltfläche aus einem anderen Fenster (JavaFX + FXML)?
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
ich online gelesen, dass dies ein Wrapper für eine Null-Zeiger-Ausnahme. Ich gehe davon aus, dass der "Setup" -Button null ist und deshalb kann ich ihn nicht ändern, aber ich kann nicht herausfinden warum. Hier
ist ein Auszug aus MainController.java:
@FXML
protected void setUpConnection(ActionEvent e) {
SetupController setupController = new SetupController();
setupController.init(this);
}
Die obige Methode aufgerufen wird, wenn die Taste "Setup" (Einstellung in der Datei: setupMenu.fxml) geklickt wird. Dies öffnet dann das separate Fenster. Hier ist der Code in SetupController.java, die das Fenster öffnet sich:
private void openSetupWindow() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("setupMenu.fxml"));
Parent root1 = (Parent)loader.load();
Stage stage = new Stage();
stage.setTitle("Setup Connection");
stage.setScene(new Scene(root1));
stage.show();
} catch(Exception exc) {
exc.printStackTrace();
}
}
Wenn die Verbindungstaste angeklickt wird, wird das folgende Verfahren (in SetupController.java) aufgerufen wird:
private void changeButtonText(ConnectionEventType e) {
Button b = main.getSetupButton();
if(e == ConnectionEventType.CONNECT) {
b.setText("Disconnect");
}
else {
b.setText("Setup Connection...");
}
}
(Haupt das ist MainController-Objekt, das an setupController.init() übergeben wurde Der obige Code ist, wo ich den Fehler erhalte. Nur um zu verdeutlichen, habe ich 2 separate fxml-Dateien, eine für das Hauptfenster und eine für das Pop-up. sample.fxml (das Hauptfenster) hat seine Controller MainController gesetzt und wird in Main.java (unten) ein:
@Override
public void start(Stage primaryStage) throws Exception{
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
GridPane root = loader.load();
Scene scene = new Scene(root, 1200, 900);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setTitle("Nest Control");
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
Versuche ich falsch auf die Schaltfläche zugreifen? Kann jemand helfen? Wie gesagt, ich habe nicht viel Erfahrung mit JavaFX oder FXML.
Danke dafür. Ich verstehe, dass meine Frage ein bisschen lang und kompliziert war. Ich werde aktualisieren, sobald ich mit dem, was Sie vorgeschlagen haben, gespielt habe. Danke noch einmal – liamw9