Добрый вечер. Возникли проблемы при работе на JavaFX 2.0 с TableView/ Это фрагмент кода реализующий колонку таблицы, которая далее будет добавлена | Код | private void setDeleteColumn() {
deleteColumn = new TableColumn<CardView, Long>("");
Callback<TableColumn<CardView, Long>, TableCell<CardView, Long>> flattenCellFactory1 = new Callback<TableColumn<CardView, Long>, TableCell<CardView, Long>>() {
public TableCell call(TableColumn p) { return new DeletingCell(" Удал."); } };
deleteColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<CardView, Long>, ObservableValue<Long>>() {
public ObservableValue<Long> call(TableColumn.CellDataFeatures<CardView, Long> p) { // p.getValue() returns the Person instance for a particular TableView row // StringProperty firstName = new SimpleStringProperty(p.getValue().getSelected())); ObservableValue<Long> value = new SimpleObjectProperty<Long>(p.getValue().getCard_id());
return value; } });
deleteColumn.setCellFactory(flattenCellFactory1); deleteColumn.setMinWidth(120); deleteColumn.setMaxWidth(120);
}
|
Далее фрагмент ячейки таблицы для удаления элемента Поле cardFacade - фасад с методами для обращений к базе данных в том числе с методом для удаления элемента из таблицы по идентификатору | Код | private Button flatten; @Autowired private CardFacade cardFacade;
@Override protected void updateItem(Long item, boolean bln) { super.updateItem(item, bln); Object object = this.getGraphic(); if (object instanceof Button) {
Button button = (Button) object; if (item == null) {
button.setDisable(true); // button.setSelected(false); } else { button.setDisable(false); //button.setSelected(item==Boolean.TRUE ? true : false); commitEdit(item); } } }
private void deleteItem() { Long id = this.getItem(); cardFacade.delete(id); for (CardView cardView : Titulari.getInstance().getCardViewsList()) { if (cardView.getCard_id().equals(id)) { Titulari.getInstance().getCardViewsList().remove(cardView); break; } } }
|
В результате в таблице будет кнопка которая при щелчке удалит ряд {Элемент данных} Когда я меняю кнопку на CheckBox и хочу чтобы по щелчку у меня в элементе менялся флажок означающий что элемент должен быть удалён в числе прочих по нажатию кнопки удалить которая теперь одна внизу под таблицей. Далее пример кода для редактирования, который в случае CheckBox а не работает | Код | deleteColumn.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<CardView,Boolean>>() {
@Override public void handle(TableColumn.CellEditEvent<CardView, Boolean> t) {
CardView cardView = (CardView) t.getTableView().getItems().get( t.getTablePosition().getRow()); cardView.setSelected(t.getNewValue()); //Здесь нет обращения к базе, я просто храню коллекцию с перечнем элементов у которых есть поле Boolean //selected mirror.update(cardView);
} });
|
Далее привожу код редактируемой ячейки. Теперь там уже нет обращения к базе. Обращение к базе должно быть когда будет нажата кнопка удалить внизу таблицы и будет запрос на удаление всех выделенныъ элементов | Код | public class CheckBoxCell extends TableCell<CardView, Boolean> {
private CheckBox checkBox;
public CheckBoxCell() { createCheckField(); setGraphic(checkBox); }
@Override protected void updateItem(Boolean item, boolean bln) { super.updateItem(item, bln); if (item == null) { checkBox.setDisable(true); return; } if (!isEmpty()) {
if (checkBox != null) { checkBox.setSelected(getItem()); } } }
@Override public void startEdit() { super.startEdit(); if (isEmpty()) { return; } if (isEmpty()) { return; }
if (checkBox == null) { createCheckField(); } else { checkBox.setSelected(getItem()); } setGraphic(checkBox);
}
@Override public void cancelEdit() { super.cancelEdit(); }
private void setSelected(Boolean selected) { super.commitEdit(selected); }
private void createCheckField() { checkBox = new CheckBox(); checkBox.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent event) { setSelected(checkBox.isSelected()); } }); } }
|
Приношу извинения за излишнее обилие кода. Но мне трудно было более кратко изложить суть проблемы Буду рад любым пожеланиям или предложениям.
|