java - 复选框状态下的 TreeView 传输

标签 java javafx treeview

我有 2 个 TreeView,第一个填充有项目。

try {
    CheckBoxTreeItem<String> treeRoot = new CheckBoxTreeItem<String>("Root");
    treeRoot.setExpanded(true);

    for (int i = 1; i <= 20; i++) {
        item = new CheckBoxTreeItem<String>("item " + i);
        treeRoot.getChildren().add(item);
    }

    treeView.setRoot(treeRoot);
    treeView.setCellFactory(CheckBoxTreeCell.<String> forTreeView());
    treePane.add(treeView, 0, 1);

} catch (Exception e) {
    e.printStackTrace();
}

我想将选中复选框的项目传输到我的第二棵树。如果选中根项,则所有子项都必须添加到第二棵树中。子根也是如此。

我尝试过类似的方法,但它不起作用。

int length = treeView.getExpandedItemCount();

CheckBoxTreeItem<String> treeRoot = new CheckBoxTreeItem<String>("On the other side");
treeRoot.setExpanded(true);

try {
    for (int i = 1; i <= length; i++) {
        item = (CheckBoxTreeItem<String>) (treeView.getTreeItem(i));
        if (item.isSelected()) {
            treeRoot.getChildren().add(item);   
        }

    }
    treeView.setRoot(treeRoot);
    treePaneExecution.add(treeView, 0, 1);
} catch (Exception e) {
    e.printStackTrace();
}

如有任何建议,我们将不胜感激!

最佳答案

使用 CheckBoxTreeItemselectedProperty() 注册一个监听器,并在选定状态更改时移动它们。这是一个简单的例子。您需要弄清楚当用户检查树根时要做什么 - 我不太清楚您想要的行为(第一棵树应该是空的吗?) - 但这应该足以让您开始。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.CheckBoxTreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.control.cell.CheckBoxTreeCell;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class MovingCheckedTreeItems extends Application {

    @Override
    public void start(Stage primaryStage) {
        CheckBoxTreeItem<String> uncheckedTreeRoot = new CheckBoxTreeItem<>("Unchecked tree");
        uncheckedTreeRoot.setExpanded(true);
        TreeView<String> uncheckedTree = new TreeView<>(uncheckedTreeRoot);
        uncheckedTree.setCellFactory(CheckBoxTreeCell.forTreeView());

        CheckBoxTreeItem<String> checkedTreeRoot = new CheckBoxTreeItem<>("Checked tree");
        checkedTreeRoot.setExpanded(true);
        TreeView<String> checkedTree = new TreeView<>(checkedTreeRoot);
        checkedTree.setCellFactory(CheckBoxTreeCell.forTreeView());

        for (int i=0; i<20; i++) {
            CheckBoxTreeItem<String> item = new CheckBoxTreeItem<>("Item "+(i+1));
            item.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
                item.getParent().getChildren().remove(item);
                if (isNowSelected) {
                    // add to checkedTree, will take all sub-nodes with it...
                    checkedTreeRoot.getChildren().add(item);
                } else {
                    // add to uncheckedTree
                    uncheckedTreeRoot.getChildren().add(item);
                }
            });
            uncheckedTreeRoot.getChildren().add(item);
        }

        HBox root = new HBox(5, uncheckedTree, checkedTree);
        Scene scene = new Scene(root, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

关于java - 复选框状态下的 TreeView 传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26753091/

相关文章:

CSS 样式在 javafx 中导出的可运行 jar 中不起作用

java - 如何从 dao 函数返回整数?

java - 如何预填充我的 Room 数据库?

java - 在带有 for 循环的 if 语句中使用数组时找不到符号

iphone - 如何在iPhone应用程序中呈现分层数据?

python - 加速这个 Python 脚本的想法

java - TreeViewer 中的项目装饰

java - 如何在 Java 中实现字符串格式化机制?

JavaFX - 刷新标签

java - 使用 JavaFX 在 Eclipse 中导出 Jar 文件