Добавление ClickHandler в div, который содержит много других виджетов - PullRequest
12 голосов
/ 29 ноября 2010

Кажется, что Panel не наследуется от HasClickHandlers, и я не могу добавить clickHandler в DivElement.Есть ли способ добавить clickHandler в DIV?

РЕДАКТИРОВАТЬ: причина, по которой я не могу использовать Label, потому что DIV, который я хочу, чтобы кликабельный, содержит другие DIV.

Ответы [ 3 ]

39 голосов
/ 29 ноября 2010

По умолчанию Panel не «тонет» событие onCLick.То есть нажатие на панели фактически не приводит к «ClickEvent», и, следовательно, обработчик не запускается.Чтобы использовать события щелчка с Panel (или, если на то пошло, любым другим виджетом), вы должны сначала вызвать на нем sinkEvents () с соответствующими битами события.

Например:

SimplePanel p = new SimplePanel();
    p.sinkEvents(Event.ONCLICK);
    p.setTitle("Click me");
    p.setSize("600px", "600px");
    p.addHandler(new ClickHandler(){

        @Override
        public void onClick(ClickEvent event) {

            Window.alert("SimplePanel clicked!");

        }

    }, ClickEvent.getType());

фрагмент кода сначала «включает» события щелчка для SimplePanel, используя p.sinkEvents(Event.ONCLICK);, а затем добавляет стандартный ClickHandler к нему.Обратите внимание, что хотя SimplePanel не реализует HasClickHandlers, вы всегда можете добавить обработчик, используя метод addHandler().

11 голосов
/ 29 ноября 2010

Используйте FocusPanel.

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

7 голосов
/ 01 декабря 2010
public class ClickableDiv extends FlowPanel implements HasClickHandlers {
    @Override
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }
}

Это должно быть все, что вам нужно.addDomHandler позаботится о «потоплении» типа события для вас.

...