当
FXMLLoader负载FXML文件,它将解析FXML文件,并指出任何
fx:id属性。它将实例化控制器(通过调用其no-
arg构造函数),然后它将
@FXML使用具有匹配
fx:id属性的相应对象初始化任何带注释的字段。完成后,它将调用控制器的
initialize()方法(如果有的话)。
因此,构造函数是在
noteTree初始化之前执行的
FXMLLoader(当然,这是可能发生的唯一顺序)。因此,当您致电
noteTree.setRoot(rootItem);
noteTree还是
null。
解决方法只是将构造函数中的代码移至
initialize方法:
public class NoteKeeperController implements Initializable{ NoteBook noteBook; TreeItem<String> rootItem; public BorderPane root; @FXML private TreeView<String> noteTree; @FXML private ScrollPane sp; @FXML private Button newNoteButton; @Override public void initialize(URL location, ResourceBundle resources){ rootItem = new TreeItem<String> ("FirstNote"); rootItem.setExpanded(true); noteTree.setRoot(rootItem); noteBook= new NoteBook(); } // ...}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)