JavaFX TreeView
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"。

