GWT: Как справиться? Нажмите на GWT FlowPanel - PullRequest
13 голосов
/ 08 июня 2010

Может быть глупый вопрос, но GWT FlowPanel (элемент raw div) не предоставляет что-либо, чтобы справиться с движением мыши / щелчком мыши по нему. Переопределение onBrowserEvent тоже не работает.

Если установить событие onclick с использованием собственного JavaScript (необходимо предварительно указать положительную высоту, высота div должна быть 0, если она не указана), тогда перехват этих событий работает правильно. Есть ли способ сделать это без использования JSNI?

Ответы [ 6 ]

20 голосов
/ 08 июня 2010

Что вам нужно сделать, это обернуть вашу FlowPanel в FocusPanel. FocusPanel содержит все возможные обработчики и, следовательно, позволит вам установить ClickHandler на него.

Другим способом было бы создание собственного виджета, расширяющего панель управления и реализующего необходимый интерфейс для возможности содержать ClickHandler.

Я лично рекомендовал бы первый способ. Проще, быстрее кодировать и не замедлять работу приложения.

8 голосов
/ 01 февраля 2011

На самом деле, вы идете на это:

FlowPanel fPanel = new FlowPanel() {
      @Override
      public void onAttach() {
           super.onAttach();
           super.addDomHandler(handler, ClickEvent.getType());  // handler is the instance         
                                                                // of your ClickHandler
      }
}

Ура !!! * * 1004

6 голосов
/ 27 октября 2011

Лучшее решение, которое я нашел для этого, было здесь .

Идея состоит в том, чтобы расширить 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()); 
    } 
} 
5 голосов
/ 07 марта 2011

Это сработало для меня (очевидно, замените "YOUR CLICKHANDLER" именем вашего обработчика кликов):

FlowPanel field = new FlowPanel();

field.addDomHandler(YOUR CLICKHANDLER, ClickEvent.getType());
0 голосов
/ 08 октября 2012

Просто оберните FlowPanel с помощью FocusPanel, который оставит виджет готовым для других действий пользователя:

Источник:

    FlowPanel flowPanel = new FlowPanel();
    FocusPanel focusPanel = new FocusPanel(flowPanel);
    focusPanel.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            Window.alert("Hi!");
        }
    });
0 голосов
/ 08 июня 2010

Кажется, вопрос тупой, да. FlowPanel может быть легко упакован или заменен на FocusPanel, что обеспечивает множество методов для мониторинга / обработки событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...