Добавление clickHandler в строку в CellTable в GWT?
Я создал базовый 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 для каждой строки?
Ответы
Ответ 1
В CellTable встроена поддержка обработки событий click. Вы можете добавить CellPreviewHandler
, который будет вызываться среди других при щелчке по строке. Он получит несколько элементов в событии, таких как значение основного события, ячейки и строки данных. Поскольку он срабатывает не только для событий кликов, вам нужно проверить, был ли запущен клик. Просто протестируйте пройденное событие: boolean isClick = "click".equals(event.getNativeEvent().getType())
.
Другой вариант заключается в расширении защищенного метода doSelection
, но он устарел и вам нужно, чтобы у вас есть правильный KeyboardSelectionPolicy
, чтобы убедиться, что он вызван, когда клик сделан. См. Последний в JavaDoc интерфейса KeyboardSelectionPolicy
.
Ответ 2
Другой способ выбора ячейки можно сделать с помощью 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