2010-02-01 58 views
1

想知道是否有人知道有一个例子,或者我可以添加到我的应用程序,类似VBox,但有2列或更多列的类吗?任何人都知道一个多列VBox的例子?

我加入的项目从环路垂直框,并且工作正常,但我想把它分成两列:

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

现在我只是要设置2个纵向方框并排并将奇数项分配给一个,甚至将另一个分配给另一个,但是如果有一个控件会自动执行此操作,那将很不错。

编辑
请不要给我变通。我已经有一个功能性的工作。但是,如果你已经写了一个这样做的类,或者知道我在哪里可以找到一个在线我会很感激。 谢谢

+0

如何将两个相似的列表并排放置并添加内容交替?设置'variableRowHeight =“false”'或者高度可能因内容而异。 – Amarghosh 2010-02-01 17:15:12

+0

在这种情况下,我也必须有项目渲染器,我之前没有说过,但是我有一个标签,每个项目有3个收音机。似乎更简单,只需要将两个VBox添加到其中。 (将HBox添加到带有HBox标签和收音机的任一Vbox中)。我不是在寻找如何做到这一点的帮助,我可以用现有的类来完成我想要的东西,只是认为如果有人已经有了一个自动完成此功能的容器,或者知道有人。我最终可能会将此课程作为习题课的练习。 – invertedSpear 2010-02-01 17:45:59

回答

1

flexlib(http://code.google.com/p/flexlib/)拥有一个可爱的FlowContainer容器控件,可以完全满足您的需求。

+0

从网站,但是,它出现flexlib不再被支承。这是一套很棒的库,但是在使用最新的SDK(3.5)时遇到了问题。 – bedwyr 2010-02-16 04:41:40

0

把它们放在一个HBox?

+0

看到我的小图,我不想让他们摆平所有的水平线,我想要两个垂直的列 – invertedSpear 2010-02-01 16:58:33

+0

我以为你想要水平放置两个垂直的列。 – Carlo 2010-02-02 13:53:42

0

你可以使用包含HBox中的每一行垂直框中,然后简单地填充每个HBox中有2项,是这样的:

变种VB:垂直框;
var array_of_items:Array;

为(VAR我:= 0;我< array_of_items.length; I + = 2)
{
VAR HB:HBOX =新HBox中();
hb.addChild(array_of_items [i]);
hb.addChild(array_of_items [i + 1]);
vb.addChild(hb);
}

+0

这与我已经在做的类似,但是如何做到这一点的一个很好的代码示例:-)我只是希望在一个组件中做到这一点。您的示例存在的问题是我的项目长度不同,并且使用该布局时,如果未专门设置某些宽度,它们将不会处于格式良好的列中。 – invertedSpear 2010-02-01 17:08:33

0

我用HBox和2种形式做了类似的事情,它将事情很好地排列起来。 动态地,您可以为每个表单添加孩子。

+0

感谢您的意见,但正如我所说我已经这么做了。我想知道的是,如果任何人已经建立了一个自动完成它的类。 I.E.如果我做了一个addChild(item);该类处理其余的。 – invertedSpear 2010-02-01 17:54:34

0

为什么不只是使用瓷砖容器,并将方向属性设置为您所需的流向?

+0

因为我不想要瓷砖,所以我想要一个2列的列表,里面有3个收音机和一个标签,我可以用两个并列的VBox制作这些标签,这些都是模仿儿童的。我只想要一个能为我做这个的类,所以我可以给一个容器喂孩子,并把它们放到2列中。 – invertedSpear 2010-02-01 21:17:16

+0

我正在使用Tile容器来呈现您所描述的确切布局类型中的HBox集合。这就是我提出这个建议的原因。 – Zaren 2010-02-01 21:49:14

0

我自己也有类似的问题。这是我最终使用的:

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

但是,最终结果稍有不同。不是将孩子移动到交替的列,而是无限期地填充第一列的高度,然后是第二列,然后是第三列等。

如果您打算让您的课程如您所说的那样工作,请等待CREATION_COMPLETE事件,然后将孩子重新安排到两个VBox控件中。

+0

我带来了你的课,并试图用它来运行它,但它没有工作,有什么想法? <?xml version =“1.0”encoding =“utf-8”?> \t \t \t \t \t \t \t \t \t \t \t \t \t的 \t \t \t \t ” – invertedSpear 2010-02-03 18:05:59

0

我认为瓷砖容器的方向=“水平”将这样做

相关问题