In my
previous post, I explained how to edit the tree item using custom cell factory.
In this post, I am going to show you how to add new tree item to the tree.
TreeViewApp.java
TestFX.java
After adding new faculty to ‘Physics Department’ the tree changed like below.
This is
continuation to my previous post (I am extending the same application developed
in previous post).
Step 1: Create a menu item to display the ‘add
Faculty’ button.
MenuItem
addMenuItem = new MenuItem("Add Faculty");
addFaculty.getItems().add(addMenuItem);
addMenuItem.setOnAction((ActionEvent
t) -> {
TreeItem<String> newFaculty = new
TreeItem<>("New Faculty");
getTreeItem().getChildren().add(newFaculty);
});
Step 2: Add this menu item, when user press right
click.
if
(!getTreeItem().isLeaf() && getTreeItem().getParent() != null) {
setContextMenu(addFaculty);
}
Find the
below working application.
TreeCellTextField.java
package com.sample.demos; import javafx.event.ActionEvent; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.control.TextField; import javafx.scene.control.TreeCell; import javafx.scene.control.TreeItem; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; public class TreeCellTextField extends TreeCell<String> { private TextField textField; private final ContextMenu addFaculty = new ContextMenu(); public TreeCellTextField() { MenuItem addMenuItem = new MenuItem("Add Faculty"); addFaculty.getItems().add(addMenuItem); addMenuItem.setOnAction((ActionEvent t) -> { TreeItem<String> newFaculty = new TreeItem<>("New Faculty"); getTreeItem().getChildren().add(newFaculty); }); } /** * 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()); if (!getTreeItem().isLeaf() && getTreeItem().getParent() != null) { setContextMenu(addFaculty); } 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); } }
After adding new faculty to ‘Physics Department’ the tree changed like below.
No comments:
Post a Comment