如何在JavaFX中填充包含复选框的tableview

如何在JavaFX中填充包含复选框的tableview,javafx,tableview,Javafx,Tableview,我创建了一个TableView,我用一个observeList填充了它, 我的表的某些列是复选框,我想要的是复选框与我创建的模型对象绑定。 到目前为止,我得到的结果是: 如果是文本,我可以看到结果,但如果是复选框则始终未选中表格视图中的复选框示例: 表中显示的项目:成员 public class Member { private StringProperty myName; private BooleanProperty myCheck; public Member(S

我创建了一个
TableView
,我用一个
observeList
填充了它, 我的表的某些列是
复选框
,我想要的是
复选框
与我创建的模型对象绑定。 到目前为止,我得到的结果是:
如果是文本,我可以看到结果,但如果是
复选框
则始终未选中

表格视图中的复选框示例:

  • 表中显示的项目:成员

    public class Member {
        private StringProperty myName;
        private BooleanProperty myCheck;
    
        public Member(String name, boolean checked) {
            myName = new SimpleStringProperty(name);
            myCheck = new SimpleBooleanProperty(checked);
        }
    
        public StringProperty nameProperty() { return myName; }    
        public BooleanProperty checkProperty() { return myCheck; }
    }
    
  • 表:(现在使用内置类CheckBoxTableCell,感谢James.D)

    observeList members=FXCollections.observearraylist();
    成员。添加(新成员(“peter”,true));
    成员。添加(新成员(“gernot”,true));
    成员。添加(新成员(“fritz”,假));
    对于(inti=1000;i<2000;i++)成员,添加(新成员(“N”+i,(i%5==0));
    TableView table=新TableView();
    table.prefHeightProperty().bind(box.heightProperty());
    表.集合项目(成员);
    TableColumn c1=新的TableColumn(“名称”);
    c1.setCellValueFactory(新属性ValueFactory(“名称”);
    table.getColumns().add(c1);
    TableColumn c2=新的TableColumn(“成员”);
    c2.setCellValueFactory(新属性ValueFactory(“检查”));
    c2.setCellFactory(列->新建CheckBoxTableCell());
    table.getColumns().add(c2);
    pane.getChildren().addAll(表);
    
  • 结果:


  • 请展示一些代码。有一个。非常感谢,它很有效,但我想知道SimpleStringProperty和StringProperty之间的区别是什么。我尝试过它们,我认为SimpleStringProperty允许我修改数据,但有了StringProperty,我无法做到这一点。如果我说的是真的,那么我真正想要的是向用户展示他所做的,同时允许他更改它,如果他想
    StringProperty
    是一个抽象类
    SimpleStringProperty
    是一个完整的实现。那么如何使用SimpleStringProperty来产生相同的效果呢?
    ObservableList<Member> members = FXCollections.observableArrayList();
    
    members.add(new Member("peter", true));
    members.add(new Member("gernot", true));
    members.add(new Member("fritz", false));
    for (int i = 1000; i < 2000; i++) members.add(new Member("N"+i, (i%5==0)));
    
    TableView<Member> table = new TableView<Member>();
    table.prefHeightProperty().bind(box.heightProperty());
    table.setItems(members);
    
    TableColumn<Member,String> c1 = new TableColumn<Member,String>("Name");
    c1.setCellValueFactory(new PropertyValueFactory<Member,String>("name"));
    table.getColumns().add(c1);
    
    TableColumn<Member,Boolean> c2 = new TableColumn<Member,Boolean>("Membership");
    c2.setCellValueFactory(new PropertyValueFactory<Member,Boolean>("check"));
    c2.setCellFactory(column -> new CheckBoxTableCell()); 
    table.getColumns().add(c2);
    
    pane.getChildren().addAll(table);