У меня есть кнопки, прикрепленные к элементам на html-странице точки входа модулей с использованием RootPanel.get("foo").add(button)
. Если я впоследствии создаю LayoutPanel и присоединяю его, используя RootLayoutPanel.get.add(layoutpanal)
, то кнопки не могут быть нажаты. Это все хорошо. Если я тогда попытаюсь удалить панель макета или очистить RootLayoutPanel
, кнопки по-прежнему не могут быть нажаты.
Есть идеи, как это очистить? Я пропустил шаг или вам просто никогда не пытаться вернуться к использованию RootPanel
страницы, если вы использовали RootLayoutPanel
?
Пример кода:
public void onModuleLoad(){
final LayoutPanel lp1=new LayoutPanel();
ClickPanel ping=new ClickPanel("Ping");
ping.getElement().getStyle().setBackgroundColor( "#fdd" );
ping.addClickHandler( new ClickHandler(){
@Override
public void onClick( ClickEvent event ){
Window.alert( "Ping!!!" );
//lp1.removeFromParent();
//RootLayoutPanel.get().remove(lp1);
//RootLayoutPanel.get().removeFromParent();
RootLayoutPanel.get().clear();
}
} );
ClickPanel bong=new ClickPanel("Bong");
bong.getElement().getStyle().setBackgroundColor( "#ddf" );
bong.addClickHandler( new ClickHandler(){
@Override
public void onClick( ClickEvent event ){
Window.alert( "Bong!!!" );
}
} );
lp1.add( ping );
lp1.setWidgetLeftWidth( ping, 100, Style.Unit.PX, 500, Style.Unit.PX );
lp1.setWidgetTopHeight( ping, 100, Style.Unit.PX, 500, Style.Unit.PX );
lp1.add( bong );
lp1.setWidgetLeftWidth( bong, 50, Style.Unit.PCT, 600, Style.Unit.PX );
lp1.setWidgetTopHeight( bong, 50, Style.Unit.PCT, 200, Style.Unit.PX );
Button b=new Button("Click Me");
b.addClickHandler( new ClickHandler(){
@Override
public void onClick( ClickEvent event ){
RootLayoutPanel.get().add( lp1 );
}
} );
RootPanel.get("button1").add( b );
}
ClickPanel
просто переопределяет HTMLPanel
, реализующий HasClickHandelers
. Нажатие «Click Me» открывает панель макета. При нажатии на пинг панели избавляется от панели макета, но кнопка «Click Me» не может быть нажата. Я пробовал разные варианты.
Обновление
Вызов RootPanel.get().remove(RootLayoutPanel.get())
удаляет RootLayoutPanel
, очищая LayoutPanel и позволяя активировать виджеты на RootPanel. Однако это приводит к тому, что что-то облажается, потому что любой последующий вызов RootLayoutPanel.get.add()
вызывает
IndexOutOfBoundsException
. Так что это не полный ответ.