Alguien sabe de una de varias columnas ejemplo VBox?
-
24-09-2019 - |
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
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á