Не помещайте узлы в свой класс предметов. Таким образом вы разрушаете главное преимущество 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;
}
...
}