Javafx tableview on复选框取消选中,禁用同一行不同列上的按钮
下图说明了我是如何填充表格的: 如您所见,一旦取消选中相关行的Javafx tableview on复选框取消选中,禁用同一行不同列上的按钮,java,javafx,javafx-tableview,Java,Javafx,Javafx Tableview,下图说明了我是如何填充表格的: 如您所见,一旦取消选中相关行的已收集列复选框,我需要禁用分期列按钮,反之亦然 以下是我目前的做法: colected_column.setCellValueFactory((TableColumn.CellDataFeatures<Member, CheckBox> param) -> { Member mRow = param.getValue(); // type objects contained within the T
已收集
列复选框,我需要禁用分期
列按钮,反之亦然
以下是我目前的做法:
colected_column.setCellValueFactory((TableColumn.CellDataFeatures<Member, CheckBox> param) -> {
Member mRow = param.getValue(); // type objects contained within the TableView
CheckBox checkBox = new CheckBox();
checkBox.selectedProperty().addListener((ov, old_val, new_val) -> {
// javafx.scene.control.Button typed ObservableValue returns as cell value
Button button = installments_column.getCellData(mRow);
button.setDisable(!new_val);
});
...
return new SimpleObjectProperty<>(checkBox);
}
collected\u column.setCellValueFactory((TableColumn.CellDataFeatures参数)->{
成员mRow=param.getValue();//键入TableView中包含的对象
复选框=新复选框();
复选框.selectedProperty().addListener((ov,旧值,新值)->{
//javafx.scene.control.Button类型的observeValue作为单元格值返回
Button Button=分期付款\列.getCellData(mRow);
按钮。设置禁用(!新建值);
});
...
返回新的SimpleObject属性(复选框);
}
但这种方法不符合要求,按钮始终处于启用状态。任何帮助都将是值得赞赏的。谢谢
不要将节点放在item类中。这样会破坏
TableView
的主要优点:将节点数量限制为显示内容所需的节点数量
您最好在成员
对象中使用布尔属性
,使用CheckBoxTableCell
显示复选框
并使用分期付款列的自定义单元格:
TableColumn<Member, Boolean> colected_column = ...;
colected_column.setCellValueFactory((TableColumn.CellDataFeatures<Member, Boolean> param) -> {
Member mRow = param.getValue(); // type objects contained within the TableView
return nRow.collectedProperty();
});
colected_column.setCellFactory(CheckBoxTableCell.forTableColumn(colected_column));
不要在item类中放置节点。这样会破坏
TableView
的主要好处:将节点数量限制为显示内容所需的节点数量
您最好在成员
对象中使用布尔属性
,使用CheckBoxTableCell
显示复选框
并使用分期付款列的自定义单元格:
TableColumn<Member, Boolean> colected_column = ...;
colected_column.setCellValueFactory((TableColumn.CellDataFeatures<Member, Boolean> param) -> {
Member mRow = param.getValue(); // type objects contained within the TableView
return nRow.collectedProperty();
});
colected_column.setCellFactory(CheckBoxTableCell.forTableColumn(colected_column));
漂亮的照片:)但和往常一样:a会更好。至于您的问题:在模型域中解决,而不是在视图中解决-您需要一个布尔值来决定禁用/选中(不要查询按钮状态,只需让按钮和复选框都由该属性驱动)漂亮的图片:),但一如既往:a会更好。至于您的问题:在模型域中解决,而不是在视图中解决-您需要一个决定禁用/选中的布尔值(不要查询按钮状态,只需让按钮和复选框都由该属性驱动)
public class Member {
private final BooleanProperty collected = new SimpleBooleanProperty(true);
public void setCollected(boolean value) {
collected.set(value);
}
public boolean isCollected() {
return collected.get();
}
public BooleanProperty collectedProperty() {
return collected;
}
...
}