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