如何向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() );
但是处理程序没有被触发。
答案 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并在添加或删除小部件时触发自定义事件。