Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JavaFX TableView, JavaFX TableView 
:(
    Опции темы
Evribiad
Дата 8.1.2012, 02:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.9.2009

Репутация: нет
Всего: нет



Добрый вечер.

Возникли проблемы при работе на 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());
            }
        });
    }
}


Приношу извинения за излишнее обилие кода.
Но мне трудно было более кратко изложить суть проблемы

Буду рад любым пожеланиям или предложениям.





PM MAIL WWW ICQ AOL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0391 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.