[JavaFX]检查每个CheckBoxTreeItem(如果选中)

时间:2015-02-08 12:04:07

标签: java javafx

我需要检查CheckBoxTreeItem根目录中的每一项。

目前我只能检查根项而不是他们的孩子。

public class Controller{


    @FXML Button button;



    @FXML
    private void press(MouseEvent event){

            System.out.println("Hello");

            System.out.println(checkBoxTreeItem.isSelected());

    }

     @FXML
     private TreeView<String> treeview;
     private CheckBoxTreeItem<String> checkBoxTreeItem;

     private CheckBoxTreeItem<String> rootItem;

     public void viewListFill() {
     rootItem.setExpanded(true);
     System.out.print("hhhhhh");
     treeview.setCellFactory(CheckBoxTreeCell.forTreeView());

     checkBoxTreeItem = new CheckBoxTreeItem("Völkerwanderung");
     rootItem.getChildren().add(checkBoxTreeItem);

     System.out.println( rootItem.isIndependent());


     checkBoxTreeItem = new CheckBoxTreeItem<>("b");
     rootItem.getChildren().add(checkBoxTreeItem);
     }


     public void initialize() {
     rootItem = new CheckBoxTreeItem<>("A");
     treeview.setRoot(rootItem);
     }

}

我无法在oracle doc中找到任何内容。 我有一个关于回电和observableValue

的红色信息

2 个答案:

答案 0 :(得分:0)

由于rootItem是给定数量项目的父项,因此您只需要检查它们的状态即可。像这样:

private boolean checkAllItemsSelected(){
    for(TreeItem item:rootItem.getChildren()){
        if(!((CheckBoxTreeItem)item).isSelected()){
            return false;
        }
    }
    return true;
}

如果是多级树,则可以创建递归方法。

修改

如果您只是需要知道是否选择了任何项目,这将返回所选项目的数量,在控制台上打印其名称:

private int checkItemsSelected(){
    int count=0;
    for(TreeItem item:rootItem.getChildren()){
        if(((CheckBoxTreeItem)item).isSelected()){
            count++;
            System.out.println("item: "+item.getValue().toString());
        }
    }
    return count;
}

如果您正在寻找一些具体项目:

private boolean checkItemIsSelected(String name){
    for(TreeItem item:rootItem.getChildren()){
        if(item.getValue().toString().equals(name)){
            return ((CheckBoxTreeItem)item).isSelected();
        }
    }
    return true;
}

答案 1 :(得分:0)

首先是你的回答。但似乎我的解释并不准确。我需要检查是否选中了任何复选框。使用您的代码,只有选中每个singel子项或root(自动选择全部)时才会出现这种情况。但我需要找出选中的复选框。

public class Controller{

@FXML Button button;

@FXML
private void press(MouseEvent event){

        System.out.println("Hallo");
        System.out.println("Es ist selektiert: " +checkAllItemsSelected());
}

private boolean checkAllItemsSelected(){
    for(TreeItem item:rootItem.getChildren()){
        if(!((CheckBoxTreeItem)item).isSelected()){
            return false;
        }
    }
    return true;
}

 @FXML
 private TreeView<String> treeview;
 private CheckBoxTreeItem<String> checkBoxTreeItem;
 private CheckBoxTreeItem<String> rootItem;

 public void initialize() {

     rootItem = new CheckBoxTreeItem<>("Root Check");
     treeview.setRoot(rootItem);
     viewListFill();
}

 public void viewListFill() {

rootItem.setExpanded(true);
treeview.setCellFactory(CheckBoxTreeCell.forTreeView());

checkBoxTreeItem = new CheckBoxTreeItem("Check 1");
rootItem.getChildren().add(checkBoxTreeItem);

checkBoxTreeItem = new CheckBoxTreeItem<>("Check 2");
rootItem.getChildren().add(checkBoxTreeItem);


}

}