CheckBoxTableCell просто показывает снятый флажок

Я пытаюсь добавить CheckBoxTableCell в свой TableColumn, но в ячейке просто отображается неотмеченный флажок, независимо от значения true или false

Мой объект

public class Room {
    private String id,type,category,floor,number;
    private Boolean status;
    //setter and getter
    ........
}

Как объявить стол

@FXML
private TableView<Room> roomTable;
@FXML
private TableColumn ....
@FXML
private TableColumn<Room,Boolean> statusColumn;
public void initialize(){
....
statusColumn.setCellValueFactory(new PropertyValueFactory<Room, Boolean>("status")); // here
statusColumn.setCellFactory(CheckBoxTableCell.forTableColumn(statusColumn));
....
}

Я решил эту проблему, создав новую переменную с типом BooleanProperty и изменив параметр PropertyValueFactory на новую переменную
проблема в том, что я не хотел использовать BooleanProperty или Property
, потому что весь мой класс модели все еще использует стандартный тип, а не свойство
есть ли способ сделать это?
если нет, возможно, я просто изменю всю свою переменную класса модели на переменную свойства


person buncis    schedule 16.11.2014    source источник


Ответы (2)


Чтобы ячейка синхронизировалась со свойством, ячейка должна получать уведомления при изменении значения свойства. Это функциональность, которую предоставляют классы свойств JavaFX. Есть способы привязки к классическим свойствам Java Bean, но они требуют гораздо большего «связывания» и в конечном итоге будут более сложными, чем использование классов свойств JavaFX. Этот вопрос аналогичен.

person James_D    schedule 16.11.2014
comment
да, я думаю, это будет сложнее, мне просто интересно переопределить метод updateItems () - person buncis; 16.11.2014

Я бы сделал это, используя следующее:

statusColumn.setCellValueFactory(new Callback<CellDataFeatures<Room, Boolean>, ObservableValue<Boolean>>() {
                @Override
                public ObservableValue<Boolean> call(CellDataFeatures<Room, Boolean> room) {
                    return new ReadOnlyBooleanWrapper(room.getValue().getStatus());
                }
            });
statusColumn.setCellFactory(CheckBoxTableCell.forTableColumn(statusColumn));

Теперь это отлично работает, если ваш checkBox не редактируется. В противном случае вы должны использовать Java Beans Properties, чтобы синхронизировать checkBox и значение статуса.

person javaHunter    schedule 18.11.2014