在GWT中向VerticalPanel添加resize侦听器/处理程序

时间:2009-08-06 20:04:56

标签: gwt

如何向VerticalPanel添加侦听器/处理程序,使其成为 当VerticalPanel的大小发生变化时触发?

我基本上尝试了以下内容:

VerticalPanel myPanel = new VerticalPanel();
//... code to add child widgets that may change the size of the parent vertical panel ...

myPanel.addHandler(new ResizeHandler() {
  public void onResize(final ResizeEvent event) {
    //... code to handle resize of vertical panel ...
  }

}, ResizeEvent.getType() );

但是处理程序没有被触发。

2 个答案:

答案 0 :(得分:16)

可靠的是窗口级别调整大小监听器:

Window.addResizeHandler(new WindowResizeHandler())

当用户调整浏览器窗口大小时,将调用您的调整大小处理程序:

public void onResize(ResizeEvent event)

您可以使用event.getHeight()event.getWidth()来获取更新的窗口尺寸。

由于您只是为整个窗口获取事件,因此您必须自己传播到要布局的组件。我通常只调用自己的doLayout()方法。此方法甚至不需要调整大小事件的高度和宽度,因为当DLH已经注释时,您可以在收到通知时询问大多数组件的尺寸,并使用它进行计算。

不幸的是,有些浏览器不经常使用onResize。在尝试不对更新发疯时,他们有时可能会坚持使用该事件几秒钟,在等待“正确”布局时让您的应用程序显得难看。因此,在可能的情况下,您应该尝试将布局留给CSS,并且可能取决于您在“table vs. CSS”战争中的立场,表格。

答案 1 :(得分:5)

VerticalPanel不会触发任何事件。由于浏览器不支持在表(或DIV或几乎任何HTML元素)上调整大小事件,因此实际上不可能添加这些事件。

您想获得什么效果?你想在修改myPanel时收到通知吗?那么也许你应该扩展VerticalPanel并在添加或删除小部件时触发自定义事件。