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

Добавление ClickHandler в div, который содержит много других виджетов

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

EDIT: причина, по которой я не могу использовать Label, поскольку DIV, который я хочу кликать, содержит другой DIV.

4b9b3361

Ответ 1

По умолчанию 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());

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

Ответ 2

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

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

Ответ 3

public class ClickableDiv extends FlowPanel implements HasClickHandlers {
    @Override
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }
}

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