JavaFx:How to create a Tree View in Java Fx?
For creating Tree View you should have a structure as provided below in JavaFx project.
We have created this Tree View to display the selected folder in console as well as also added folder image to tree. You can modify code according to your requirement.
Main.java
package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent root = FXMLLoader.load(getClass().getResource("/application/Main.fxml"));
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
MainController.java
package application;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
public class MainController implements Initializable {
@FXML
TreeView <String> treeview;
Image img=new Image(getClass().getResourceAsStream("/img/folder.png"));
Image img1=new Image(getClass().getResourceAsStream("/img/folder1.jpg"));
@SuppressWarnings("unchecked")
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
TreeItem<String> root= new TreeItem<>("Root",new ImageView(img));
//Root node will be displayed as expanded format.
root.setExpanded(true);
TreeItem<String> nodea= new TreeItem<>("Node A",new ImageView(img));
TreeItem<String> nodeb= new TreeItem<>("Node B",new ImageView(img));
TreeItem<String> nodec= new TreeItem<>("Node C",new ImageView(img));
root.getChildren().addAll(nodea,nodeb,nodec);
//sub nodes of node A.
TreeItem<String> nodea1= new TreeItem<>("Node A1",new ImageView(img1));
TreeItem<String> nodea2= new TreeItem<>("Node A2",new ImageView(img1));
TreeItem<String> nodea3= new TreeItem<>("Node A3",new ImageView(img1));
nodea.getChildren().addAll(nodea1,nodea2,nodea3);
treeview.setRoot(root);
}
//Action event to show the value of node when clicked.
public void mouseclick(MouseEvent mouseclickevent){
TreeItem<String> item = treeview.getSelectionModel().getSelectedItem();
System.out.println(item.getValue());
}
}
Main.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TreeView?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainController">
<children>
<TreeView fx:id="treeview" layoutX="50.0" layoutY="50.0" onContextMenuRequested="#mouseclick" onMouseClicked="#mouseclick" prefHeight="200.0" prefWidth="200.0" />
</children>
</AnchorPane>
No comments:
Post a Comment