<acronym id="atkaq"></acronym>
      <bdo id="atkaq"></bdo>

      天才教育網合作機構 > 設計軟件培訓機構 > Flash培訓機構 >

      東莞設計培訓網

      歡迎您!
      朋友圈

      400-850-8622

      全國統一學習專線 9:00-21:00

      位置:設計軟件培訓資訊 > Flash培訓資訊 > 在List組件中使用渲染器

      在List組件中使用渲染器

      日期:2005-12-23 00:00:00     瀏覽:248    來源:東莞設計培訓網

      在網上看過很多人轉載darronschall的 LabelCellRenderer 例子,其中有個錯誤,把myList.cellRenderer = "LabelCellRenderer";這行代碼放到了注釋里面去了,但是到處轉載的依然沒有修正(其實原文是正確的)。

      其實看了這個我們并沒有求甚解,要知道授人予魚,不如授人予漁。我們再來看下為什么通過cellrenderer可以給List、DataGrid、Tree 和 Menu 組件以及其它列表組件增強單元格內容顯示。

      我們首先要從List組件開始分析,List 類至關重要。DataGrid、Tree 和 Menu 組件是 List 類的擴展。

      List 類由行構成。這些行顯示滑過和選區突出顯示,用作行選區的點擊狀態,并在滾動中扮演重要的角色。除了選區突出顯示和圖標(如節點圖標和 Tree 組件的展開箭頭)之外,行還包含一個單元格(或者,如果是 DataGrid,則包含多個單元格)。在默認情況下,這些單元格是實現 CellRenderer API 的 TextField 對象。但是,您可以讓 List 使用不同的組件類作為每一行的單元格。*的要求是該類必須實現 List 用于與單元格通信的 CellRenderer API。

      List 類使用一種非常復雜的算法進行滾動。一個列表只會列出它一次能顯示的最多行數,超出 rowCount 屬性的值的項目根本不會獲得行。在列表滾動時,它會將所有行上下移動(取決于滾動方向)。然后,列表將重復使用滾出視圖的行;列表會重新初始化這些行,并使用它們作為正在滾入視圖的新行,方法是將舊行的值設置為視圖中的新行,然后將舊行移到新項目滾入視圖的位置。

      要使用 CellRenderer API,您必須編寫包含下面四個方法的類

      CellRenderer.getPreferredHeight() 返回單元格的*高度
      CellRenderer.getPreferredWidth() 返回單元格的*寬度
      CellRenderer.setSize() 設置單元格的寬度和高度
      CellRenderer.setValue() 設置要顯示在單元格中的內容

      基于列表的組件將使用該類與單元格通信。這就是我們看到的darronschall定義的LabelCellRenderer類。

      系統將為單元格自動指定兩個方法和一個屬性

      CellRenderer.getCellIndex() 返回包含單元格渲染器數據字段的名稱的字符串
      CellRenderer.getDataLabel() 返回包含兩個字段(columnIndex 和 rowIndex)的對象,這兩個字段指明單元格的位置
      CellRenderer.listOwner 指向包含單元格的列表的引用
      以便允許它與基于列表的組件通信。例如,假設單元格內包含一個復選框,該復選框導致行在單擊時被選中。單元格渲染器需要引用包含它的基于列表的組件,以便調用基于列表的組件的 selectedIndex 屬性。同時,單元格需要知道它當前正在渲染的項目索引,以便能夠將 selectedIndex 設置為正確的編號;單元格可以使用 CellRenderer.listOwner 和 CellRenderer.getCellIndex() 達到此目的。您不需要實現這些 API;在將單元格放到基于列表的組件內時,單元格將自動接收這些 API。
      我們來看下LabelCellRenderer類實現的這幾個方法代碼:

      function createChildren(Void) : Void { 
          label = createObject("Label", "label", 1, { });
          label.html = true;
          size();
      }
       
      // setSize is implemented by UIComponent and calls size(), after setting
      // __width and __height
      function size(Void) : Void { 
          label.setSize(__width, __height);
          // make sure the label field is in the top-left corner 
          // of the row
          label._x = 0;
          label._y = 0;
      }
       
      function setValue( ) : Void { 
          // hide the label if no data to display
          label._visible = (item!=undefined);
          // this line actually sets htmlText 
          label.text = item.label;
      }
       
      function getPreferredHeight(Void) : Number { 
          // this is the height with the default font, you might
          // need to adjust this to suit your needs
          return 18; 
      }
       
      function getPreferredWidth(Void) : Number { 
          // default to the width of the listbox
          return __width;
      }

      其中用來顯示html標記的就是setValue方法了。
      我們定義了這個類后,剩下就是對List組件來設置新的單元格渲染器了。使用下面的代碼:
      1 : //LabelCellRenderer就是指定單元格渲染的連接ID
      2 : myList.cellRenderer = "LabelCellRenderer";

      也許看完這些,你可以做出更好效果的渲染器來。要注意的是,只有flashMX2004的List組件才支持。

      如果本頁不是您要找的課程,您也可以百度查找一下:
      相關文章

      亚洲无碼另类精品_亚洲天堂无码高清性视频_欧美日韩一区二区综合_亚洲午夜福利理论片在线贰信

        <acronym id="atkaq"></acronym>
        <bdo id="atkaq"></bdo>

        亚洲美女性爱视频在线观看 | 亚洲国产人成视频在线观看 | 亚洲乱码中文字幕久久 | 麻豆国产AV精选 | 色综合伊人丁香五月婷婷综合缴情 | 一级少妇高清性色生活片 |