Как удалить CheckBox из TableView в JavaFX? - PullRequest
0 голосов
/ 22 мая 2018

Я пишу программу рассадки с использованием JavaFX.У меня есть таблица, в которой хранится список учащихся, в котором указаны их имена, оценки, а также присутствуют они или отсутствуют (с помощью флажка).У меня есть кнопка удаления, которая позволяет мне удалить студентов из списка.Это работает нормально, однако, когда я удаляю объект ученика, флажок не идет вместе с ним.Я не уверен, что мне нужно было бы добавить, чтобы заставить это работать.Вот фрагмент кода удаления.Ниже также есть два изображения, которые показывают мою проблему.Это мой первый пост, поэтому, пожалуйста, дайте мне знать, если я что-то пропустил.Пожалуйста помоги!Спасибо!

ObservableList<Student> items, sel;
items = currentTable.getItems();
sel = currentTable.getSelectionModel().getSelectedItems();
Student s = new Student("", "", 0, "");
for (Student p : sel) {
    items.remove(p);
    s = p;
}

до удаления

[Before Delete

после удаления

[After Delete

1 Ответ

0 голосов
/ 22 мая 2018

Это не имеет ничего общего с методом delete или remove.Это связано с тем, что вы сделали в TableColumn.setCellFactory().

Чтобы получить показанный вами флажок, вы должны были использовать (в общем) один из двух методов:

Переопределение updateItem ()в TableCell при настройке Cell Factory

В updateItem() есть параметр empty, который указывает, является ли строка пустой или нет.Вы должны использовать это, чтобы определить, когда не показывать флажок.

column.setCellFactory(col -> {
    return new TableCell<Foo, Boolean>() {
        final CheckBox checkBox = new CheckBox();

        @Override
        public void updateItem(final Boolean selected, final boolean empty) {
            super.updateItem(selected, empty);

            if (!this.isEmpty()) {
                setGraphic(checkBox);
                setText("");
            }
            else {
                setGraphic(null); // Remove checkbox if row is empty
                setText("");
            }
        }
    }
}

Использование CheckBoxTableCell

JavaFX API имеет этот удобный класс CheckBoxTableCell, который сделает все это за вас.Большинству людей трудно использовать этот класс, потому что есть две вещи, которые необходимо обеспечить для правильного его использования:

  1. TableView, к которому относится столбец, должен быть редактируемым.
  2. Сам TableColumn должен быть редактируемым.

Пример:

tableView.setEditable(true);
tableColumnSelected.setCellFactory(CheckBoxTableCell.forTableColumn(tableColumnSelected));
tableColumnSelected.setEditable(true);

Что касается того, какую запись вы хотите удалить с помощью кнопки удаления, вам просто нужно удалитьправильные предметы из TableView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...