我使用RootPanel.get("foo").add(button)
在模块入口点html页面上附加了元素。如果我随后创建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
。单击“单击我”将打开布局面板。单击面板ping将删除布局面板,但无法单击“单击我”按钮。我尝试了各种选择。
更新
调用RootPanel.get().remove(RootLayoutPanel.get())
删除RootLayoutPanel
清除LayoutPanel并允许RootPanel上的小部件可点击。但是它确实会导致某些事情搞砸,因为随后对RootLayoutPanel.get.add()
的任何调用都会引发错误
IndexOutOfBoundsException
。所以这不是完整的答案。
答案 0 :(得分:4)
第二个StackOverflow问题,我自己的第二个答案。那不好吗?
所以,第一次调用RootLayoutPanel.get()
会做两件事;创建一个RootLayoutPanel
对象,保持对自身的单例引用,并通过调用RootPanel.get().add()
将自身添加到RootPanel。
您可以使用RootPanel.remove(RootLayoutPanel.get())
将其删除,但是如果您拨打RootLayoutPanel
,这仍然会保留对RootLayoutPanel.get()
的单一引用。由于这不附加到任何东西,你不能添加anthing而不抛出IndexOutOfBoundsException
。
要解决此问题,您可以使用RootLayoutPanel
手动将RootPanel
重新附加到RootPanel.get().add(RootLayoutPanel.get())
。即使RootLayoutPanel
已经附加,调用此类似乎也不会造成任何伤害......据我所知。
答案 1 :(得分:0)
RootPanel.get().remove(lp1)
怎么样? (其中lp1
是上述代码中的LayoutPanel
)
答案 2 :(得分:0)
为什么要使用RootPanel?
你应该试试
RootLayoutPanel.get("foo").add(button);
RootLayoutPanel.get.add(layoutpanal);
RootLayoutPanel将自身附加到文档正文(尽管在这种情况下它应该附加到foo元素)。据我所知,它占用了屏幕上的所有可用空间(或者更精确 - 它占用了浏览器窗口中的所有空间)。
这样您就可以使用按钮并拥有布局面板。