2009-08-06 14 views
6

¿Cómo agrego un oyente/manejador a VerticalPanel de modo que sea activado cuando VerticalPanel cambia de tamaño?Agregar el oyente/manejador de tamaño a VerticalPanel en GWT

básicamente he intentado lo siguiente:

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()); 

pero el controlador no quede activado.

Respuesta

16

Lo que funciona de forma fiable es el oyente-nivel de la ventana de cambio de tamaño:

Window.addResizeHandler(new WindowResizeHandler()) 

Su manejador de cambio de tamaño se llama cuando el usuario cambia el tamaño de la ventana del navegador:

public void onResize(ResizeEvent event) 

Puede utilizar event.getHeight() y event.getWidth() a obtener las dimensiones de la ventana actualizada.

Como solo obtendrá el evento para la ventana como un todo, tendrá que hacer su propia propagación a los componentes que desea diseñar. Por lo general, solo llamo al método doLayout(). Este método ni siquiera necesita el alto y el ancho del evento de redimensionamiento porque, como DLH ya comenta, puede solicitar la mayoría de los componentes para sus dimensiones cuando se le notifique, y hacer sus cálculos con eso.

Desafortunadamente, algunos buscadores no hacen la cosa onResize con mucha frecuencia. Al tratar de no volverse loco con las actualizaciones, a veces pueden aferrarse al evento por algunos segundos, dejando su aplicación visiblemente fea mientras espera el diseño "correcto". Por lo tanto, cuando sea posible, debe intentar dejar el diseño en CSS y posiblemente, dependiendo de su postura en las tablas de guerra "tables vs. CSS".

5

El Panel vertical no dispara ningún evento. Agregar esos eventos no es realmente posible ya que el navegador no admite el cambio de tamaño de eventos en una tabla (o DIV o casi cualquier elemento HTML, de hecho).

¿Cuál es el efecto que le gustaría obtener? ¿Desea recibir una notificación cuando se modifique myPanel? entonces quizás debería extender el Panel Vertical y disparar un evento personalizado cuando los widgets son agregados o eliminados.

+0

En última instancia, quiero ajustar el tamaño del navegador según los cambios en VerticalPanel (un tipo de función de ajuste automático que debo implementar). Estos cambios están principalmente impulsados ​​por el cambio de tamaño de widgets que están contenidos en VerticalPanel. Por ejemplo, tengo un widget TreeGrid con filas plegables. Si el usuario expande/contrae una fila, cambia la altura del contenedor. Creo que podría seguir su consejo y extender VerticalPanel para escuchar los cambios en los widgets que se agregan. Pero el problema es que no hay una función para obtener la altura del panel en píxeles (al menos que yo sepa). – P4ndaman

+0

Simplemente llama a getOffsetHeight() desde la clase UIObject para obtener la altura en píxeles. – DLH

+0

Heh acaba de enterarse de eso, gracias sin embargo. – P4ndaman

Cuestiones relacionadas