Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx tableview on复选框取消选中,禁用同一行不同列上的按钮_Java_Javafx_Javafx Tableview - Fatal编程技术网

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;
    }

    ...
}