2010-02-01 61 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

我認爲瓷磚容器的方向=「水平」將這樣做

相關問題