2013-02-06 17 views
1

我试图实现ProvidesResize接口到com.google.gwt.user.client.ui.AbsolutePanel。然后,我实施了RequiresResize到其假想的孩子,但它似乎像方法onResize()未能被调用,或者我没有得到它:(GWT - AbsolutePanel和ProvideResize + RequiresResize

所以我的问题是...如何抓住一个AbsolutePanel子部件调整大小或?不是,是有可能

PS GWT 2.2/2.3

+0

我也做了差不多同样的情况,就像其父绝对面板调整大小设置相对子控件位置样式或通过设置它的宽度和高度为100%。 – Dipak

+0

'完成'的意思是成功了吗?如果'是',请分享一些提示:) – user592704

回答

2

你的面板本身可以实现RequiresResize接口,并有onResize()方法做这样的事情(从DeckLayoutPanel复制):

public void onResize() { 
    for (Widget child : getChildren()) { 
     if (child instanceof RequiresResize) { 
     ((RequiresResize) child).onResize(); 
     } 
    } 
    } 

现在,如果您将面板设置为ProvidesResize小部件的子项,则onResize()调用链应通过面板传播给面板的子项。

+0

您的意思是AbsolutePanel应该实现RequiresResize接口,因为onResize()方法仅在RequiresResize中或两者兼而有之?你能否展示一个详细的代码片段 – user592704

+0

我发现在DeckLayoutPanel中,onResize()方法是通过forceLayout()方法调用的:S因此,我不确定AbsolutePanel中的等价物是什么? – user592704

+0

如果您的扩展'AbsolutePanel'并实现'ProvideResize'的类也实现了'RequiresResize',那么当它成为另一个'ProvideResize'面板的子类时,它的onResize()方法将被调用,并且会导致调用onResize()你的面板的孩子,如果像上面的代码片段执行。 –

1

HTML只是不会告诉你什么时候改变了大小。主要无赖。

你可以发现什么是当窗口改变大小。 RootLayoutPanel侦听窗口大小更改事件。当它听到一个,它告诉所有的孩子,“嘿,你可能只是改变大小,检查出来。”然后,所有这些孩子都应该告诉他们所有的孩子,“嘿,检查你的体型,伙计们,可能会有所不同。”

所以。实施ProvidesResizeAbsolutePanel必须以某种方式与此过程挂钩。如果将其添加到RootLayoutPanel,则可以通过获得消息实施RequiresResize。如果您没有将其添加到RootLayoutPanel链中,则必须以某种方式自己查找调整大小信息。您可以侦听窗口大小事件,也可以在知道布局中更改了其他内容时触发大小计算。任何你想要的。不幸的是,除非您有连续的RequiresResizeProvidesResize小部件连续链到RootLayoutPanel,否则无法为您完成。

1

你可以做一些事情呈三角this