Подтвердить что ты не робот

Что такое способ обработки Нажмите на GWT FlowPanel

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

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

4b9b3361

Ответ 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!");
        }
    });