ListChangeListener,AddListener到ListView或ListView中的布尔值复选框

时间:2019-03-01 12:19:49

标签: java listview javafx checkbox changelistener

我有一个Java程序,我没有编写我要反向/更新的代码,以便添加一些非常需要的功能。

该程序基于在/ input中找到的某些csv文件生成两个ListView,即list1:NameEntry和list2:GroupEntry。

NameEntry包含带有相应复选框的用户名列表。 GroupEntry包含一长串用户角色及其复选框。

我当前的任务是在GUI中添加一个“选择所有角色”复选框,以将所有GroupEntry角色项设置为“ true”。这成功完成了。

我的问题是将onChanged()侦听器添加到ListView或单个复选框项,以在手动取消选中一个或多个角色的情况下禁用“设置所有角色”切换。

@FXML
  public void setAllRoles()
  {
    ObservableList<GroupEntry> groups = this.list2.getItems();
    if (this.allRoles) {
      this.allRoles = false;
      for (GroupEntry item : groups) {
      item.setSelected(new SimpleBooleanProperty(false));
      this.list2.refresh();
      }
    } else {
      this.allRoles = true;
      for (GroupEntry item : groups) {
      item.setSelected(new SimpleBooleanProperty(true));
      item.addListener(new ListChangeListener<GroupEntry>() {
           public abstract onChanged(ObservableValue<? extends GroupEntry> ov,
             Boolean old_val, Boolean new_val) {
                 //System.out.println(item.isSelected());
                 allRoles = false;
             }
      });
      }
      this.list2.refresh();
    }
  }

当尝试编译controller .class文件时,出现以下错误:

invalid method declaration; return type required
           public abstract onChanged(ObservableValue<? extends GroupEntry> ov,
                           ^

我也尝试过不使用摘要,但是编译器会返回相同的错误。

这都是javafx。有谁知道这个问题可能是什么,或者有任何清晰的示例/指南?我读了无数的文档页面,但似乎无法绕过这个简单的错误。我对Java相当陌生,但没有编码。

非常感谢!

2 个答案:

答案 0 :(得分:0)

这是一个简单的解决方案。您在方法声明中缺少类型。例如voidonChanged应该是方法,而不是构造函数。同时删除abstract限定词。

 public void onChanged(ObservableValue<? extends GroupEntry> ov

编辑 ListChangeListener是一个界面。您需要正确地覆盖onChanged方法。该方法需要与定义中相同的参数:

void onChanged(ListChangeListener.Change<? extends E> c)

答案 1 :(得分:0)

经过大量的试验和反复试验,下面的代码现在可以正常工作,同时提供正确的视觉反馈,请使用checkbox.setIndeterminate()并实现与“ item.isSelected()。getValue”配对的“当前阈值”,“最大阈值”整数变量()”条件触发复选框状态。当然,有更清洁的实施方法,但这对我有用。固定为:

C11

感谢那些捐出2美分的人! 保重stackoverflow!