JavaFX场景构建器控制器

时间:2014-09-09 11:38:17

标签: java nullpointerexception javafx-2 scenebuilder

我正在尝试操作由Scene Builder生成的TextField中的文本。我的控制器看起来像这样:

@FXML
private TextField textDescr;

public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
    textDescr = new TextField();
    assert textDescr != null : "fx:id=\"textDescr\" was not injected: check your FXML   file 'provingGroundsUI.fxml'.";
    Game.mainFSM.enter();
}
public void setText(String s) {
    // TODO Auto-generated method stub
    textDescr.setText(s);
}

我收到NullPointerException。我曾尝试使用和不使用textDescr = new TextField();部分的机器人。我不太明白......我认为JavaFX在程序开始时初始化了所有的UI变量。

2 个答案:

答案 0 :(得分:1)

您的控制器类应实现Initializable

@FXML注释显示该字段将由JavaFX初始化。因此,请确保删除new TextField内容。

您确定在FXML中分配了此控制器吗?

答案 1 :(得分:1)

  1. 你的FXML看起来如何?
  2. 操纵setText函数中的textDescr有很多风险。最好使用绑定的StringProperty:
  3. 
    
        @FXML
        private Text textDescr;
    
        private StringProperty textProperty = new SimpleStringProperty();  
    
        @FXML
        void initialize() {
                assert textDescr != null : "fx:id=\"textDescr\" was not injected: check your FXML file 'TestView.fxml'.";
               textDescr.textProperty().bind(textProperty);
        }
    
        public ReadOnlyStringProperty textProperty(){
              return textProperty;
        }