Ответ 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()
.