Добавление clickHandler для строки в CellTable в GWT? - PullRequest
13 голосов
/ 26 апреля 2011

Я создал базовую таблицу CellTable и заполнил ее некоторыми данными.Теперь я хочу добавить clickHandler в каждую строку, но я не уверен, как это сделать.Я создал clickEvent для всей таблицы, но мне нужно по одному для каждой строки.

    table.sinkEvents(Event.ONCLICK);
    table.setTitle("Click me");
    table.setSize("600px", "600px");
    table.addDomHandler(new ClickHandler()
    {
        @Override
        public void onClick(ClickEvent event)
        {
            Window.alert("You clicked!" +);

        }
    }, ClickEvent.getType());

Могу ли я сделать что-то похожее, чтобы добавить clickEvent для каждой строки?

Ответы [ 2 ]

29 голосов
/ 26 апреля 2011

CellTable имеет встроенную поддержку для обработки событий щелчка.Вы можете добавить CellPreviewHandler, который будет вызываться среди других при щелчке строки.Он получит несколько элементов в событии, таких как собственное событие, ячейка и значение строки данных.Поскольку он запускается не только для событий щелчка, вам необходимо проверить, было ли оно выполнено.Просто протестируйте пройденное событие: boolean isClick = "click".equals(event.getNativeEvent().getType()).

Другой вариант - расширить защищенный метод doSelection, но он устарел, и вам необходимо убедиться, что у вас есть правильный KeyboardSelectionPolicy, установленный, чтобы убедиться, чтоон вызывается, когда щелчок сделан.Смотрите последнее в JavaDoc интерфейса KeyboardSelectionPolicy.

19 голосов
/ 30 мая 2011

Другой способ выбрать ячейку можно сделать с помощью NoSelectionModel и добавить ее в таблицу:

//EDIT: this is a field, not a local variable
TheCellObject clickedObject; //the object selected by selectionModel

final NoSelectionModel<TheCellObject> selectionModel = new NoSelectionModel<TheCellObject>();

    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

                @Override
                public void onSelectionChange(SelectionChangeEvent event) {
                    clickedObject = selectionModel.getLastSelectedObject();
                }
            });
cellTable.setSelectionModel(selectionModel); //add selection model to your celltable
...