代码之家  ›  专栏  ›  技术社区  ›  P4ndaman

在GWT中将Resize Listener/Handler添加到VerticalPanel

gwt
  •  6
  • P4ndaman  · 技术社区  · 16 年前

    如何将侦听器/处理程序添加到垂直面板,以便 垂直面板大小改变时触发?

    我基本上尝试了以下方法:

    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 回复  |  直到 15 年前
        1
  •  16
  •   Carl Smotricz    15 年前

    可靠工作的是窗口级调整大小侦听器:

    Window.addResizeHandler(new WindowResizeHandler())
    

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

    public void onResize(ResizeEvent event)
    

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

    因为您只获得整个窗口的事件,所以您必须对想要布局的组件进行自己的传播。我通常打电话给 doLayout() 我自己的方法。这个方法甚至不需要调整大小事件的高度和宽度,因为正如DLH已经给出的注释,当您收到通知时,您可以要求大多数组件提供其尺寸,并用它进行计算。

    不幸的是,有些浏览器不经常执行onResize操作。在尝试不疯狂更新时,他们有时可能会将事件保持几秒钟,让应用程序在等待“正确”布局时看起来很难看。因此,在可能的情况下,您应该尝试将布局留给CSS,并且可能,取决于您在“表格与CSS”战争中的立场,表格。

        2
  •  5
  •   David Nouls    16 年前

    垂直面板不会触发任何事件。添加这些事件实际上是不可能的,因为浏览器不支持调整表(或DIV或几乎任何HTML元素)上的事件大小。

    你想得到什么效果?修改mypanel时是否要收到通知?然后,您可能应该扩展垂直面板,并在添加或删除小部件时触发自定义事件。