GWT CellTree выбор - PullRequest
       12

GWT CellTree выбор

8 голосов
/ 01 августа 2011

У меня есть CellTree , который использует MultiSelectionModel с CheckboxCells как часть составной ячейки.Кажется, все это работает.

Я пытаюсь создать вкладки в моем интерфейсе для каждого элемента, который можно выбрать в дереве.Звучит банально, но я озадачен тем, как получить MyData на selectionChange .Элементы должны оставаться выбранными , поэтому, если я откажусь от них позже, вкладки затем снова удаляются.

Мне нужно получить MyData для только что выбранного элемента, чтобы узнать, каким должно быть содержимое вкладки.

        final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>();
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        public void onSelectionChange(SelectionChangeEvent event) {

        }
    });

Мне кажется, что я упускаю очевидное.Все, что я могу сделать в событии selectionChange , это опросить мой обработчик выбора, чтобы увидеть, что представляет собой выбранный набор.Есть ли способ, которым я могу присоединить слушателя к определенному выделению дерева вместо глобального, «что-то изменилось» слушатель.

Любые подсказки будут очень признательны.

Ответы [ 3 ]

7 голосов
/ 14 июня 2012

Добавление расширенной модели выбора даст вам последний выбранный элемент:

gridSelectionModel = new MultiSelectionModel<MyData>(KEY_PROVIDER){

        public void setSelected(MyData myData, boolean selected) {
            super.setSelected(myData, selected);
            if (selected){
                System.out.println("setSelected selected " + myData);
                // call now some ui handler to use the last selected myData element
            }
        }
    };

Надеюсь, это поможет.

4 голосов
/ 02 августа 2011

Хорошо, для тех, кто обнаружит это позже, есть способ!

Когда вы добавляете CheckboxCell в CompositeCell, вы можете указать возвращаемый FieldUpdater, который вызывается при изменении поля.*

            hasCells.add(new HasCell<TableLight, Boolean>() {

            // Cell containing checkbox
            private Cell cell = new CheckboxCell(true, false);

            public Cell<Boolean> getCell() {
                return cell;
            }

            public FieldUpdater<TableLight, Boolean> getFieldUpdater() {
                return new FieldUpdater<TableLight, Boolean>() {

                    public void update(int index, TableLight object, Boolean value) {
                        if (value) {
                            tablesTabPanel.addTable(object);
                        } else {
                            tablesTabPanel.removeTable(object);
                        }
                    }
                };
            }

            public Boolean getValue(TableLight object) {
                return selectionModel.isSelected(object);
            }
        });

Кроме того, просто чтобы избежать путаницы.Когда я говорил о MyData выше, это TableLight в примере.

2 голосов
/ 02 августа 2011

Вам необходимо получить доступ к getSelectedSet () в вашей selectionModel , чтобы получить выбранные элементы в вашем CellTree. К сожалению, кажется, теперь есть способ, как получить последний выбранный элемент (как в SingleSelectionModel ).

 final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>();
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        public void onSelectionChange(SelectionChangeEvent event) {
              Set<TableLight> selectedItems = selectionModel.getSelectedSet();
        }
    });
...