gpt4 book ai didi

javafx如何在按钮单击事件上展开整个treeItem?

转载 作者:行者123 更新时间:2023-12-02 14:29:15 25 4
gpt4 key购买 nike

在Javafx中,如何在按钮单击事件上展开整个treeItem?

由于使用 Accordion 时滚动出现一些问题,我正在尝试使用 TreeItem 复制 Accordion 效果。请看下面我的代码片段-

final TreeItem<FlowPane> rootItem = new TreeItem<>();
root.setExpanded(true);
for (int i = 0; i < 12; i++) {
TreeItem<FlowPane> rootItem1 = new TreeItem<>(miniflowPane());
TreeItem<FlowPane> item1 = new TreeItem<>(flowPaneLarge());
rootItem1.getChildren().add(item1);
rootItem.setExpanded(false);
}
final TreeView<FlowPane> tree;
tree = new TreeView<>(rootItem);
tree.setShowRoot(false);
tree.setMinWidth(450.0);
tree.setMaxWidth(450.0);
HBox listHeaderBox = new HBox();
listHeaderBox.setAlignment(Pos.CENTER_LEFT);
Button b = new Button(">");
b.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {

}
});
listHeaderBox.getChildren().add(b);
VBox listVBox = new VBox(5.0);
listVBox.getCHildren().addAll(listHeaderBox,tree);
Scene scene = new Scene(listVBox,500,650);
primartStage.setScene(scene);
primaryStage.show();
}

miniflowPane() 和 flowPane() 函数创建一些虚拟内容并返回 FlowPane。在Button b的点击事件中,如何展开rootItem的所有子项和孙项?

最佳答案

这个怎么样:

private void expandTreeView(TreeItem<?> item){
if(item != null && !item.isLeaf()){
item.setExpanded(true);
for(TreeItem<?> child:item.getChildren()){
expandTreeView(child);
}
}
}

现在在按钮处理程序中添加调用:

    Button bExpand = new Button(">");
bExpand.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
expandTreeView(rootItem);
}
});

如果您也想添加折叠按钮:

    Button bCollapse = new Button("<");
bCollapse.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
collapseTreeView(rootItem);
}
});

哪里:

private void collapseTreeView(TreeItem<?> item){
if(item != null && !item.isLeaf()){
item.setExpanded(false);
for(TreeItem<?> child:item.getChildren()){
collapseTreeView(child);
}
}
}

编辑

如果根不可见,则可以从其第一个子节点进行调用:

    bExpand.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
for(TreeItem<?> child: rootItem.getChildren()){
expandTreeView(child);
}
}
});
bCollapse.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
for(TreeItem<?> child: rootItem.getChildren()){
collapseTreeView(child);
}
}
});

关于javafx如何在按钮单击事件上展开整个treeItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27166838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com