Снимите флажок в табличном представлении Javafx, отключите кнопку в той же строке, но в другом столбце - PullRequest
0 голосов
/ 30 апреля 2018

Ниже показано, как я заполнил свою таблицу: enter image description here

Как видите, мне нужно отключить кнопку столбца Installments, если флажок столбца Collected в соответствующей строке снят, и наоборот.

Вот мой подход:

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

Но этот подход не соответствует требованию, кнопка остается включенной все время. Любая помощь будет заметна. Спасибо.

enter image description here

1 Ответ

0 голосов
/ 30 апреля 2018

Не помещайте узлы в свой класс предметов. Таким образом вы разрушаете главное преимущество TableView: ограничение количества узлов тем, которое необходимо для отображения контента.

Вам лучше использовать BooleanProperty в вашем Member объекте, используйте CheckBoxTableCell для отображения CheckBox es и используйте пользовательские ячейки для столбца рассрочки платежей:

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));
TableColumn<Member, Boolean> installmentsColumn = ...;
installmentsColumn.setCellValueFactory(cd -> cd.getValue().collectedProperty());
installmentsColumn.setCellFactory(column -> new TableCell<Member, Boolean>() {

    private final Button button = new Button("View Info");

    {
        button.setOnAction(evt -> {
            Member member = (Member) getTableRow().getItem();

            // TODO: handle button click
        });
    }

    @Override
    protected void updateItem(Boolean item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            setGraphic(null);
        } else {
            setGraphic(button);
            button.setDisable(!item);
        }
    }
});
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;
    }

    ...
}
...