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?

Author: BioStunt, 2019-02-04

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