Wie kann ein textfield aus fxml-Datei aktualisiert werden setText in der java-Datei?

Ich bin auf der Suche zum aktualisieren von text in einem textfield-basierten auf einen bestimmten Wert. Damit das Beispiel einfacher, ich habe mein Programm kleiner. Das problem scheint zu sein, wenn ich oben.setText("Das ist mein neuer Text");

Sah ich diese:
so ändern Sie den text des TextField im java fx 2

aber die Antwort scheint nicht sinnvoll. Ich weiß nicht, warum würden Sie initialisieren ein textfield, das bereits umgesetzt wurde. Egal, es hat nicht funktioniert.

Habe ich auch angeschaut:
NullPointerException (JavaFX-Label.setText())

Dies scheint das am nächsten zu dem, was ich denke, ist das Problem, aber wenn habe ich Folgendes bekomme ich eine Fehlermeldung. Nur für die übersichtlichkeit ist dies in der JavaFXApplication5 Klasse.

try {
        FXMLLoader loader = new FXMLLoader(
            getClass().getResource("FXML.fxml")
        );
        FXMLLoader.setController(this); //non-static method setController(Object) 
                                        //can not be referenced from static context ERROR****
        Parent root = (Parent) loader.load();
        /*Parent root = FXMLLoader.load(getClass().getResource("FXML.fxml"));

        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.setTitle("java code");
        stage.show();
        */

    }

Lesen auf dem internet habe ich gefragt, ob es eine race-condition: http://gotoanswer.stanford.edu/nullpointerexception_in_javafx_initialize_method-8807679/

Also habe ich versucht:

Platform.runLater(new Runnable() {
  @Override public void run() {
    top.setText("This is my new Text");
  }
});

Aber das hat nicht funktioniert. Ich weiß, dass es sein kann, in Szene gesetzt Builder aber ich brauche eine Möglichkeit, dynamisch zu ändern, es basiert auf Werten, die von einer anderen Klasse. Ich kann herausfinden, wie man das Teil wenn ich nur herausfinden, wie zu setzen, um mit zu beginnen. Hoffentlich erklärt dies genug, etwas Hilfe zu bekommen.

    FXMLController Class:
    public class FXMLController implements Initializable {

        @FXML private TextField top;

        public FXMLController() {
            System.out.println("Hi");
            top.setText("This is my new Text"); //This breaks the program *********
        }
        @Override
        public void initialize(URL url, ResourceBundle rb) {
        } 
    }
    FXML.fxml class:
    <?xml version="1.0" encoding="UTF-8"?>

    <?import java.lang.*?>
    <?import java.util.*?>
    <?import javafx.scene.*?>
    <?import javafx.scene.control.*?>
    <?import javafx.scene.layout.*?>

    <AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="javafxapplication5.FXMLController">
       <children>
          <TextField fx:id="top" layoutX="171.0" layoutY="68.0" />
       </children>
    </AnchorPane>
JavaFXApplication5 class: //main class
public class JavaFXApplication5 extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        try {
            Parent root = FXMLLoader.load(getClass().getResource("FXML.fxml"));
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.setTitle("java code");
            stage.show();
        }
        catch (Exception ex) {
            Logger.getLogger(JavaFXApplication5.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public static void main(String[] args) {
        launch(args);
    }  
}

InformationsquelleAutor eckama | 2014-11-13

Schreibe einen Kommentar