2 Replies Latest reply on Aug 31, 2006 6:18 AM by Futurmat

    Error displaying custom tree

    Futurmat Level 1
      Dear List,

      I created a custom version of the tree component. I use a custom renderer class (based on the adobe-example):

      package MyRenderers {

      import mx.controls.treeClasses.*;
      import mx.collections.*;
      import mx.controls.Label;
      import mx.controls.TextArea;
      import flash.text.TextField;
      import mx.controls.CheckBox;
      import mx.controls.Text;
      import mx.controls.Button;

      public class MyTreeItemRenderer extends TreeItemRenderer {
      // Define the constructor.
      public function MyTreeItemRenderer() {
      super();
      }

      // Override the set method for the data property
      // to set the font color and style of each node.
      override public function set data(value:Object):void {
      super.data = value;
      if(TreeListData(super.listData).hasChildren) {
      setStyle("color", 0xff0000);
      setStyle("fontWeight", 'bold');
      }
      else {
      setStyle("color", 0x000000);
      setStyle("fontWeight", 'normal');
      }
      }
      // Override the updateDisplayList() method
      // to set the text for each tree node.
      override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
      super.updateDisplayList(700, unscaledHeight);
      var tmp:XMLList = new XMLList(TreeListData(super.listData).item);
      if(super.data) {
      if(TreeListData(super.listData).hasChildren) {
      var myStr:int = tmp[0].children().length();
      super.label.text = TreeListData(super.listData).label + "(" + myStr + ")";
      }
      var message:TextField = new TextField();
      message.text = tmp.@bodytext;
      message.width = 400;
      message.y = 30;
      message.x = super.label.x;
      addChild(message);
      }
      }
      }
      }

      *****************************************************************
      And a mxml file:

      <?xml version="1.0"?>
      <mx:Application xmlns:mx=" http://www.adobe.com/2006/mxml" initialize="initCollections();" xmlns="*">

      <mx:Script>
      <![CDATA[

      import mx.collections.*;

      public var xmlBalanced:XMLList =
      <>
      <node subject="Überschrift 1" bodytext="1) Gaaaaanz viel Text, der im Body steht und sonst was macht ...">
      <node subject="Überschrift 1.1" bodytext="1.1) Gaaaaanz viel Text, der im Body steht und sonst was macht ...">
      <node subject="Überschrift 1.1.1" bodytext="1.2) Gaaaaanz viel Text, der im Body steht und sonst was macht ..."/>
      </node>
      <node subject="Überschrift 2" bodytext="2) Gaaaaanz viel Text, der im Body steht und sonst was macht ...">
      <node subject="Überschrift 2.1" bodytext="2.1) Gaaaaanz viel Text, der im Body steht und sonst was macht ..."/>
      <node subject="Überschrift 2.2" bodytext="2.2) Gaaaaanz viel Text, der im Body steht und sonst was macht ..."/>
      <node subject="Überschrift 2.3" bodytext="2.3) Gaaaaanz viel Text, der im Body steht und sonst was macht ..."/>
      </node>
      </node>
      <node subject="Überschrift 3" bodytext="3) Gaaaaanz viel Text, der im Body steht und sonst was macht ...">
      <node subject="Überschrift 3.1" bodytext="3.1) Gaaaaanz viel Text, der im Body steht und sonst was macht ...">
      <node subject="Überschrift 3.1.1" bodytext="Gaaaaanz viel Text, der im Body steht und sonst was macht ..."/>
      <node subject="Überschrift 3.1.2" bodytext="Gaaaaanz viel Text, der im Body steht und sonst was macht ..."/>
      </node>
      <node subject="Überschrift 4" bodytext="Gaaaaanz viel Text, der im Body steht und sonst was macht ...">
      <node subject="Überschrift 4.1" bodytext="Gaaaaanz viel Text, der im Body steht und sonst was macht ..."/>
      <node subject="Überschrift 4.2" bodytext="Gaaaaanz viel Text, der im Body steht und sonst was macht ..."/>
      </node>
      </node>
      </>;

      [Bindable]
      public var xlcBalanced:XMLListCollection;

      private function initCollections() : void {
      xlcBalanced = new XMLListCollection(xmlBalanced);
      }

      ]]>
      </mx:Script>
      <mx:Text width="400" text="The nodes with children are in bold red text, with the number of children in parentheses ( )."/>
      <mx:Tree id="compBalanced" dataProvider="{xlcBalanced}" labelField="@subject" width="800" height="500" itemRenderer="MyRenderers.MyTreeItemRenderer" rowHeight="50" />
      </mx:Application>
      *****************************************************************

      Everything seems to be alright. But when I start opening and closing the nodes the message text copied multiple times on top of each other. Is this a graphical problem? Or is it my code? How can I solve it?

      Best regards

      Peter