JavaFX TreeView是一个用于显示层次数据的控件。它由TreeItem组成,每个TreeItem可以包含子TreeItem,从而形成树状结构。TreeView允许用户展开和折叠节点,以便查看或隐藏子节点。
以下是一个简单的JavaFX TreeView示例,展示了如何填充嵌套数据:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class TreeViewExample extends Application {
@Override
public void start(Stage primaryStage) {
// 创建根节点
TreeItem<String> rootItem = new TreeItem<>("Root");
rootItem.setExpanded(true); // 默认展开根节点
// 添加子节点
for (int i = 1; i <= 3; i++) {
TreeItem<String> item = new TreeItem<>("Item " + i);
rootItem.getChildren().add(item);
// 添加子节点的子节点
for (int j = 1; j <= 2; j++) {
TreeItem<String> subItem = new TreeItem<>("SubItem " + i + "." + j);
item.getChildren().add(subItem);
}
}
// 创建TreeView并设置根节点
TreeView<String> tree = new TreeView<>(rootItem);
// 创建布局并添加TreeView
StackPane root = new StackPane();
root.getChildren().add(tree);
// 设置场景并显示窗口
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.setTitle("TreeView Example");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
问题:TreeView加载大量数据时性能下降。 原因:一次性加载所有节点可能导致内存占用过高和UI响应缓慢。 解决方法:
VirtualizedScrollPane
,只渲染可见部分。示例代码(懒加载):
tree.setCellFactory(param -> new TreeCell<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
} else {
setText(item);
}
}
});
rootItem.addEventHandler(TreeItem.branchExpandedEvent(), event -> {
TreeItem<String> item = event.getTreeItem();
if (item.getChildren().isEmpty()) {
// 模拟加载子节点
for (int i = 1; i <= 2; i++) {
TreeItem<String> subItem = new TreeItem<>("Lazy SubItem " + item.getValue() + "." + i);
item.getChildren().add(subItem);
}
}
});
通过这些方法,可以有效提升TreeView的性能和用户体验。
领取专属 10元无门槛券
手把手带您无忧上云