Что такое способ обработки Нажмите на GWT FlowPanel
Может быть, это глупый вопрос, но GWT FlowPanel (элемент raw div
) не предоставляет что-то, чтобы справиться с движением мыши/движением мыши по нему. Переопределение onBrowserEvent
тоже не работает.
Если установка события onclick
осуществляется с использованием собственного JavaScript (необходимо предварительно указать положительную высоту, высота div должна быть равна 0
, если она не указана), тогда перехват этих событий работает правильно. Есть ли способ сделать это без использования JSNI?
Ответы
Ответ 1
Что вам нужно сделать, это обернуть FlowPanel в FocusPanel. FocusPanel содержит весь возможный обработчик и, таким образом, позволит вам установить ClickHandler.
Другим методом было бы создать собственный виджет, расширяющий поле потока и реализующий необходимый интерфейс, чтобы иметь возможность содержать ClickHandler.
Я лично рекомендовал бы первый метод. Это проще, быстрее кодировать и не замедлит ваше приложение.
Ответ 2
Собственно, вы идете для этого:
FlowPanel fPanel = new FlowPanel() {
@Override
public void onAttach() {
super.onAttach();
super.addDomHandler(handler, ClickEvent.getType()); // handler is the instance
// of your ClickHandler
}
}
Ура!!!
Ответ 3
Лучшее решение, которое я нашел для этого, было здесь.
Идея состоит в том, чтобы расширить FlowPanel (или даже SimplePanel) для реализации соответствующих интерфейсов обработчиков, что является гораздо более опрятной опцией для ситуаций, когда вам не требуются полная функциональность и возможности фокусировки FocusPanel. См. Ниже:
public class MouseAwareFlowPanel extends FlowPanel implements
HasMouseOverHandlers, HasMouseOutHandlers, HasClickHandlers
{
public HandlerRegistration addMouseOverHandler(MouseOverHandler handler)
{
return addDomHandler(handler, MouseOverEvent.getType());
}
public HandlerRegistration addMouseOutHandler(MouseOutHandler handler)
{
return addDomHandler(handler, MouseOutEvent.getType());
}
public HandlerRegistration addClickHandler(ClickHandler handler)
{
return addDomHandler(handler, ClickEvent.getType());
}
}
Ответ 4
Это сработало для меня (очевидно, замените "YOUR CLICKHANDLER" своим именем кликера):
FlowPanel field = new FlowPanel();
field.addDomHandler(YOUR CLICKHANDLER, ClickEvent.getType());
Ответ 5
Кажется, вопрос - глупый, да. FlowPanel
можно легко обернуть или заменить на FocusPanel
, что обеспечивает множество методов для мониторинга/обработки событий.
Ответ 6
Просто оберните FlowPanel с помощью FocusPanel, который также оставит готовым виджет для другого взаимодействия с пользователем:
Источник:
FlowPanel flowPanel = new FlowPanel();
FocusPanel focusPanel = new FocusPanel(flowPanel);
focusPanel.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Window.alert("Hi!");
}
});