[JavaFX]如果选中,检查每个 CheckBoxTreeItem
[JavaFX]Check every single CheckBoxTreeItem if selected
我需要检查 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 文档中找不到任何内容。
我对回电很生气 observableValue
由于 rootItem
是给定数量的项目的父项,您只需遍历它们以检查它们的状态。像这样:
private boolean checkAllItemsSelected(){
for(TreeItem item:rootItem.getChildren()){
if(!((CheckBoxTreeItem)item).isSelected()){
return false;
}
}
return true;
}
如果是多层树,您可以创建递归方法。
编辑
如果您只需要知道是否选择了任何项目,这将 return 选择的数量,在控制台上打印他们的名字:
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;
}
首先感谢您的回答。但我的解释似乎并不准确。我需要检查是否有任何复选框被 selected。对于您的代码,只有当每个 children 都是 selected 或 root(即自动 select 全部)时,它才是正确的。但我需要找出哪些复选框是 selected.
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);
}
}
我需要检查 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 文档中找不到任何内容。
我对回电很生气 observableValue
由于 rootItem
是给定数量的项目的父项,您只需遍历它们以检查它们的状态。像这样:
private boolean checkAllItemsSelected(){
for(TreeItem item:rootItem.getChildren()){
if(!((CheckBoxTreeItem)item).isSelected()){
return false;
}
}
return true;
}
如果是多层树,您可以创建递归方法。
编辑
如果您只需要知道是否选择了任何项目,这将 return 选择的数量,在控制台上打印他们的名字:
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;
}
首先感谢您的回答。但我的解释似乎并不准确。我需要检查是否有任何复选框被 selected。对于您的代码,只有当每个 children 都是 selected 或 root(即自动 select 全部)时,它才是正确的。但我需要找出哪些复选框是 selected.
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);
}
}