Step 1: Set the tree view editable status to
true.
TreeView<String>
treeView = new TreeView<>(rootItem);
treeView.setEditable(true);
Step 2: Create a custom tree cell class by
extending ‘TreeCell’ class. Override below methods of TreeCell class.
a. startEdit
b. cancelEdit
c. updateItem
Step 3: Set the custom cell factory.
treeView.setCellFactory((TreeView<String>
p) -> new TreeCellTextField());
Find the
below working application.
package com.sample.demos; import javafx.scene.control.TextField; import javafx.scene.control.TreeCell; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; public class TreeCellTextField extends TreeCell<String> { private TextField textField; /** * On editing, create new text field and set it using setGraphic method. */ @Override public void startEdit() { super.startEdit(); if (textField == null) { createTextField(); } setText(null); setGraphic(textField); textField.selectAll(); } /** * On cancel edit, set the original content back */ @Override public void cancelEdit() { super.cancelEdit(); setText((String) getItem()); setGraphic(getTreeItem().getGraphic()); } @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty); if (empty) { setText(null); setGraphic(null); return; } if (!isEditing()) { setText(getString()); setGraphic(getTreeItem().getGraphic()); return; } if (textField != null) { textField.setText(getString()); } setText(null); setGraphic(textField); } private void createTextField() { textField = new TextField(getString()); textField.setOnKeyReleased((KeyEvent t) -> { if (t.getCode() == KeyCode.ENTER) { commitEdit(textField.getText()); } else if (t.getCode() == KeyCode.ESCAPE) { cancelEdit(); } }); } private String getString() { return getItem() == null ? "" : getItem().toString(); } }
TreeViewApp.java
package com.sample.demos; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class TreeViewApp extends Application { @SuppressWarnings("unchecked") @Override public void start(Stage primaryStage) throws Exception { /* Define Root Item */ TreeItem<String> rootItem = new TreeItem<>("College"); rootItem.setExpanded(true); /* Defile 1st level child items */ TreeItem<String> physicsDepartment = new TreeItem<>("Physics Department"); TreeItem<String> chemistryDepartment = new TreeItem<>("Chemistry Department"); TreeItem<String> mathsDepartment = new TreeItem<>("Maths Department"); /* Add items to root item */ rootItem.getChildren().addAll(physicsDepartment, chemistryDepartment, mathsDepartment); /* Adding Physics faculty details to physics department */ TreeItem<String> physicsFaculty1 = new TreeItem<>("Srinivasa Rao"); TreeItem<String> physicsFaculty2 = new TreeItem<>("Madavi Latha"); physicsDepartment.getChildren().addAll(physicsFaculty1, physicsFaculty2); physicsDepartment.setExpanded(true); /* Adding chemistry faculty details to physics department */ TreeItem<String> chemistryFaculty1 = new TreeItem<>("Naga Veni"); TreeItem<String> chemistryFaculty2 = new TreeItem<>("Raghava Rao"); chemistryDepartment.getChildren().addAll(chemistryFaculty1, chemistryFaculty2); chemistryDepartment.setExpanded(true); /* Adding maths faculty details to maths department */ TreeItem<String> mathsFaculty1 = new TreeItem<>("Venkata Anjaneyulu"); TreeItem<String> mathsFaculty2 = new TreeItem<>("Rama Krishna"); mathsDepartment.getChildren().addAll(mathsFaculty1, mathsFaculty2); mathsDepartment.setExpanded(true); TreeView<String> treeView = new TreeView<>(rootItem); treeView.setEditable(true); treeView.setCellFactory((TreeView<String> p) -> new TreeCellTextField()); StackPane stackPane = new StackPane(); stackPane.getChildren().add(treeView); primaryStage.setScene(new Scene(stackPane)); primaryStage.setTitle("Tree View Example"); primaryStage.setWidth(900); primaryStage.setHeight(500); primaryStage.show(); } }
TestFX.java
package com.sample.demos; import javafx.application.Application; public class TestFX { public static void main(String args[]) { Application.launch(TreeViewApp.class, args); } }
Thank you!
ReplyDeletewelcome....
Delete