我有以下类(class):
主要:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
BorderPane root = FXMLLoader.load(getClass().getResource("../view/PersonOverview.fxml"));
AnchorPane view2 = FXMLLoader.load(getClass().getResource("../view/view2.fxml"));
root.setLeft(view2);
primaryStage.setScene(new Scene(root, 1000, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
树 Controller :
public class TreeController implements Initializable {
//Set icon for folder
Node folderIcon = new ImageView(new Image(this.getClass().getResourceAsStream("../icon/icon.jpg")));
//Set root
TreeItem<String> root;
@FXML TreeView<String> tree;
//Set other Items
private TreeItem<String> item1 = new TreeItem<String>("item1", folderIcon);
private TreeItem<String> item2 = new TreeItem<String>("item2", folderIcon);
private TreeItem<String> item3 = new TreeItem<String>("item3", folderIcon);
private TreeItem<String> item4 = new TreeItem<String>("item4", folderIcon);
private TreeItem<String> item5 = new TreeItem<String>("item5", folderIcon);
//Add Children to root
private void makeChildren() {
root.getChildren().add(item1);
root.getChildren().add(item2);
root.getChildren().add(item3);
root.getChildren().add(item4);
root.getChildren().add(item5);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
root = new TreeItem<String>("root", folderIcon);
makeChildren();
root.setExpanded(true);
tree.setRoot(root);
}
}
当然还有我的 view2 fxml 文件:
<AnchorPane
maxHeight="-Infinity" maxWidth="-Infinity"
minHeight="-Infinity" minWidth="-Infinity"
prefHeight="400.0" prefWidth="354.0"
xmlns="http://javafx.com/javafx/8.0.40"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="control.TreeController">
<children>
<TreeView
layoutX="69.0" layoutY="118.0"
prefHeight="400.0" prefWidth="354.0"
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>
现在我遇到的问题是它会在 tree.setRoot(root);
我的 Main 中出现一个 ConstructLoad 异常:
AnchorPane view2 = FXMLLoader.load(getClass().getResource("../view/view2.fxml"));
我仍在学习这些东西,但有人告诉我,使用 FXML 时,不需要使用“new”初始化 TreeView,因为 @FXML 注释已经使用 tree.setRoot(root) 处理了这个问题。
很抱歉问了这样一个新手问题,但我在过去的 2 个小时里一直在谷歌上搜索,但没有得到任何启发。
最佳答案
I'm still learning this stuff but I was told that when using FXML, you don't need to initialize TreeViews using "new" as the @FXML annotation will already take care of this with tree.setRoot(root).
您猜对了,但是为了让 JavaFX 注入(inject)您的 Treeview(= 为您创建"new"),您需要声明如下内容:
<Treeview fx:id="tree" />
在view2.fxml中。
将 fx:id 属性设置为与 Java 代码中的 Treeview 变量同名。
关于java - 简单的 Javafx TreeView 抛出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30170164/