JavaFX TreeView

时间:2020-01-09 10:36:43  来源:igfitidea点击:

JavaFX TreeeView使我们能够在JavaFX应用程序内部显示树状视图。 JavaFX TreeView由类javafx.scene.control.TreeView表示。

创建一个TreeView

我们只需创建TreeView类的新实例即可创建JavaFX TreeView。这是创建新的JavaFXTreeView实例的示例:

TreeView treeView = new TreeView();

将TreeView添加到场景图

为了使JavaFXTreeView可见,必须将其添加到JavaFX场景图。这是显示如何向JavaFX场景图添加JavaFXTreeView的示例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TreeViewExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        TreeView treeView = new TreeView();

        VBox vbox = new VBox(treeView);

        Scene scene = new Scene(vbox);

        primaryStage.setScene(scene);

        primaryStage.show();
    }

}

请注意,在以上示例中创建的TreeView将没有任何项目(节点)要显示。在下一节中,我们将看到如何将树项添加到" TreeView"中。

将树项添加到TreeView

JavaFX TreeView显示的树中的项目由TreeItem类(javafx.scene.control.TreeItem)表示。这是创建一组TreeItem实例并将其添加到JavaFX TreeView实例的示例:

TreeItem rootItem = new TreeItem("Tutorials");

TreeItem webItem = new TreeItem("Web Tutorials");
webItem.getChildren().add(new TreeItem("HTML  Tutorial"));
webItem.getChildren().add(new TreeItem("HTML5 Tutorial"));
webItem.getChildren().add(new TreeItem("CSS Tutorial"));
webItem.getChildren().add(new TreeItem("SVG Tutorial"));
rootItem.getChildren().add(webItem);

TreeItem javaItem = new TreeItem("Java Tutorials");
javaItem.getChildren().add(new TreeItem("Java Language"));
javaItem.getChildren().add(new TreeItem("Java Collections"));
javaItem.getChildren().add(new TreeItem("Java Concurrency"));
rootItem.getChildren().add(javaItem);

TreeView treeView = new TreeView();
treeView.setRoot(rootItem);

将孩子添加到TreeItem

如果查看上一节中的示例,则可以看到TreeItem可以将其他TreeItem实例作为子级。这种亲子关系可以无限期地递归继续。这是在JavaFX应用程序中逻辑上构造树节点的方式。这是一个示例,显示了如何将子" TreeItem"实例添加到父" TreeItem":

TreeItem javaItem = new TreeItem("Java Tutorials");
javaItem.getChildren().add(new TreeItem("Java Language"));
javaItem.getChildren().add(new TreeItem("Java Collections"));
javaItem.getChildren().add(new TreeItem("Java Concurrency"));

TreeItem rootItem = new TreeItem("Tutorials");
rootItem.getChildren().add(javaItem);

这个例子创建了一个带有单个根TreeItem的树,树上设置了一个子TreeItem,并且这个子TreeItem本身添加了3个子TreeItem实例。

隐藏TreeView的根项

我们可以隐藏JavaFXTreeView的根项目(根节点)。为此,我们可以调用setShowRoot()方法,并将boolean值false作为参数传递给它。这是隐藏JavaFXTreeView的根TreeItem的示例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TreeViewExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        TreeItem rootItem = new TreeItem("Tutorials");

        TreeItem webItem = new TreeItem("Web Tutorials");
        webItem.getChildren().add(new TreeItem("HTML  Tutorial"));
        webItem.getChildren().add(new TreeItem("HTML5 Tutorial"));
        webItem.getChildren().add(new TreeItem("CSS Tutorial"));
        webItem.getChildren().add(new TreeItem("SVG Tutorial"));
        rootItem.getChildren().add(webItem);

        TreeItem javaItem = new TreeItem("Java Tutorials");
        javaItem.getChildren().add(new TreeItem("Java Language"));
        javaItem.getChildren().add(new TreeItem("Java Collections"));
        javaItem.getChildren().add(new TreeItem("Java Concurrency"));
        rootItem.getChildren().add(javaItem);

        TreeView treeView = new TreeView();
        treeView.setRoot(rootItem);

        treeView.setShowRoot(false);

        VBox vbox = new VBox(treeView);

        Scene scene = new Scene(vbox);

        primaryStage.setScene(scene);

        primaryStage.show();
    }

}

注意该行以粗体显示。该行指示JavaFXTreeView隐藏根节点。这是一个截图,显示了结果JavaFXTreeView的外观,所有节点均已展开:

注意如何不显示带有文本" Tutorials"的根" TreeItem"。