0

I've got the following classes:

Main:

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); 
    }
}

TreeController:

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);
    } 
}

And of course my view2 fxml file:

    <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>

Now the problem I have is that it will throw a Nullpointer Exception at tree.setRoot(root);

And a ConstructLoad Exception in my Main at:

AnchorPane view2 = FXMLLoader.load(getClass().getResource("../view/view2.fxml"));

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).

Sorry for such a noobish question but I've been googling for the past 2 hours and haven't gotten any wiser.

1
  • I only see one line in your view2.fxml file? Commented May 20, 2015 at 17:08

1 Answer 1

1

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).

You guessed right, but in order for JavaFX to inject your Treeview (= make the "new" for you) you need to declare something like:

<Treeview fx:id="tree" />

in view2.fxml.

With the fx:id attribute setted to the same name as your Treeview variable in Java code.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.