JavaFX. TreeView. Data when clicking on Elements
I started to deal with JavaFX and a question appeared. Is it possible to make it so that when you click on the TreeView elements, the text that is bound to this element appears. That is, roughly speaking, it should turn out like this: TreeView - table of contents, TextArea-text for each chapter. If this can be implemented, please tell me what methods should be used?
0
1 answers
import java.util.ArrayList;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView.EditEvent;
import javafx.scene.control.cell.TextFieldTreeCell;
import javafx.scene.control.TreeView;
import javafx.event.EventHandler;
public class FxTreeViewExample3 extends Application
{
// Create the TextArea
private final TextArea textArea = new TextArea();
public static void main(String[] args)
{
Application.launch(args);
}
@Override
public void start(Stage stage)
{
// Create the TreeViewHelper
TreeViewHelper helper = new TreeViewHelper();
// Get the Products
ArrayList<TreeItem> products = helper.getProducts();
// Create the TreeView
TreeView treeView = new TreeView();
// Create the Root TreeItem
TreeItem rootItem = new TreeItem("Vehicles");
// Add children to the root
rootItem.getChildren().addAll(products);
// Set the Root Node
treeView.setRoot(rootItem);
// Make the TreeView editable
treeView.setEditable(true);
// Set a cell factory to use TextFieldTreeCell
treeView.setCellFactory(TextFieldTreeCell.forTreeView());
// Set editing related event handlers (OnEditStart)
treeView.setOnEditStart(new EventHandler<TreeView.EditEvent>()
{
@Override
public void handle(EditEvent event)
{
editStart(event);
}
});
// Set editing related event handlers (OnEditCommit)
treeView.setOnEditCommit(new EventHandler<TreeView.EditEvent>()
{
@Override
public void handle(EditEvent event)
{
editCommit(event);
}
});
// Set editing related event handlers (OnEditCancel)
treeView.setOnEditCancel(new EventHandler<TreeView.EditEvent>()
{
@Override
public void handle(EditEvent event)
{
editCancel(event);
}
});
// Set the preferred number of text rows
textArea.setPrefRowCount(15);
// Set the preferred number of text columns
textArea.setPrefColumnCount(25);
// Create the VBox
VBox root = new VBox();
// Add the TreeView to the VBox
root.getChildren().addAll(treeView,new Label("Message Log:"), textArea);
// Create the Scene
Scene scene = new Scene(root,400,500);
// Add the Scene to the Stage
stage.setScene(scene);
// Set the Title for the Scene
stage.setTitle("TreeView Example 3");
// Display the stage
stage.show();
}
// Helper Methods for the Event Handlers
private void editStart(TreeView.EditEvent event)
{
writeMessage("Started editing: " + event.getTreeItem() );
}
private void editCommit(TreeView.EditEvent event)
{
writeMessage(event.getTreeItem() + " changed." +
" old = " + event.getOldValue() +
", new = " + event.getNewValue());
}
private void editCancel(TreeView.EditEvent e)
{
writeMessage("Cancelled editing: " + e.getTreeItem() );
}
// Method for Logging
private void writeMessage(String msg)
{
this.textArea.appendText(msg + "\n");
}
}
The example is described in more detail here : https://examples.javacodegeeks.com/core-java/javafx-treeview-example/
0
Author: Device, 2019-02-04 23:05:30