Pregunta

Sólo me preguntaba si alguien sabe de un ejemplo por ahí, o una clase de lo que puedo añadir a mi aplicación que llevaría a cabo como una caja vertical pero con 2 o más columnas?

Estoy agregando elementos a una caja vertical de un bucle, y que trabaja muy bien, pero yo quiero tener que divide en dos columnas:

 _________________
|        |        |
| Item 1 | Item 2 |
| Item 3 | Item 4 |
| Item 5 |        |
|________|________|

Por ahora sólo voy a establecer 2 vboxes lado del otro y artículos impares atribuirá a uno, e incluso a la otra, pero sería bueno tener un control hacerlo automáticamente.

Editar
Por favor, dejar de dar rodeos mi trabajo. Ya tengo un trabajo funcional alrededor. Pero si ya ha escrito una clase que hace esto, o sabe donde puedo encontrar una línea que realmente lo apreciaría. Gracias

¿Fue útil?

Solución

flexlib ( http://code.google.com/p/flexlib/ ) tiene un precioso control contenedor FlowContainer que va a hacer exactamente lo que necesita.

Otros consejos

ponerlos en un HBox?

Se puede usar un caja vertical que contiene un HBox para cada fila y simplemente rellenar cada HBox con 2 elementos, algo como:

vb var: caja vertical;
array_of_items var: Matriz;

for (var i: int = 0; i {
  hb var: HBOX = new HBox ();
  hb.addChild (array_of_items [i]);
  hb.addChild (array_of_items [i + 1]);
  vb.addChild (HB);

}

hice algo similar a esto con un HBox y 2 formas, que las líneas de las cosas muy bien. Dinámicamente, se puede alternar la adición de los niños a cada formulario.

¿Por qué no usar el azulejo de contenedores, y establecer la propiedad de dirección a su dirección del flujo requerido?

Yo tenía un problema similar a mí mismo. Esto es lo que terminé usando:

package {
    import mx.containers.HBox;
    import mx.containers.VBox;
    import mx.events.FlexEvent;

    public class MultiColumnVBox extends HBox {
        // public properties
        public var columnWidth:int;
        public var verticalGap:int;
        public var adjustForScrollbar:Boolean;

        public function MultiColumnVBox() {
            super();
            this.addEventListener(FlexEvent.CREATION_COMPLETE, rearrangeChildren);
        }

        private function rearrangeChildren(evtObj:FlexEvent):void {
            // height will change whilst rearranging children, as will the Children Array
            // we store them once at the start
            var myHeight:int = this.height;
            var children:Array = this.getChildren();

            var lastIndex:int = 0;
            var vBoxIndex:int = 0;
            var vBox:VBox;
            var totalHeight:int = -this.verticalGap + (this.adjustForScrollbar ? 16 : 0);

            for(var i:int=0; i<children.length; i++) {
                // resize each child and measure the height
                // if you don't want it resized to the columnWidth, set the maxWidth property
                children[i].width = this.columnWidth;
                children[i].validateSize();
                totalHeight += children[i].measuredHeight + this.verticalGap;
                // if we're too tall, or we've reached the last element, move them into a VBox
                if(totalHeight > myHeight || i == children.length-1) {
                    vBox = new VBox();
                    vBox.setStyle("verticalGap", this.verticalGap);
                    vBox.width = this.columnWidth;
                    // include last child if there is room
                    for(var j:int=lastIndex; j<(totalHeight > myHeight ? i : i+1); j++) {
                        vBox.addChild(children[j]);
                    }
                    this.addChildAt(vBox, vBoxIndex);
                    vBoxIndex += 1;
                    lastIndex = i;
                    totalHeight = -this.verticalGap + (this.adjustForScrollbar ? 16 : 0);
                }
            }
        }
    }
}

El resultado final es ligeramente diferente, sin embargo. En lugar de mover los niños a las columnas alternas, se llena la altura de la primera columna, a continuación, la segunda, luego la tercera, etc. indefinidamente.

Si usted planea hacer su nuestra clase, como usted ha dicho, un enfoque similar debería funcionar:. Esperando el evento CREATION_COMPLETE, y luego la reordenación de los niños en dos controles VBox

creo contenedor Azulejo con dirección = "horizontal" lo hará

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top