首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

J2ME 元件開發:可伸縮目錄樹 TreeList 實作指南

     編輯:Java 程式設計入門

設計目標

標準 List 功能薄弱,無 Model/View 分離。本文實作繼承 List 的 ExpandList,支援兩層可伸縮樹結構、標籤/數據分離、激活/非激活圖示切換、選擇事件精準回傳任意 Object、資料結構無關性。

核心資料結構

ExpandListItem:樹節點實體

  • label:顯示文字
  • type:GROUP=1(父節點,content 為子節點 Vector)或 ITEM=0(葉節點)
  • imagePath / selectImgPath:預設/選中圖示路徑
  • ifselected:是否展開(父節點)或高亮(葉節點)
  • content:任意 Object 業務數據

ExpandList:顯示邏輯控制器

  • itemList:完整資料樹(Vector<ExpandListItem>)
  • appearHookList:當前螢幕實際顯示的扁平化列表(含縮進空格)
  • currentSelectedIndex/Object:快速定位選中項

運作流程

  1. 初始化:建構子接收 itemList,呼叫 LoadList()。
  2. 載入顯示:LoadList() 先清空 List,遞迴遍歷 itemList:
     - 父節點:加入自身,若 ifselected=true 則遞迴加入所有子節點(縮進一空格),圖示切換為 selectImgPath。
     - 葉節點:直接加入。
     所有項目同步加入 appearHookList 保持索引對應。
  3. 使用者選擇:commandAction 取得 List 選中索引,對應 appearHookList 找到真實 ExpandListItem。
     - 若為父節點:切換 ifselected,重新 LoadList() 刷新(簡單但效率較低,可優化為動態插入/移除子節點)。
     - 若為葉節點:若有 selectImgPath 則更新圖示,回傳 content 給上層業務邏輯。

完整原始碼片段

public class ExpandList extends List implements CommandListener {
    private Vector itemList = new Vector();
    private Vector appearHookList = new Vector();
    // ... 建構子、appendItem、Init、LoadList 詳見原文

    public void commandAction(Command c, Displayable d) {
        int idx = getSelectedIndex();
        if (idx >= 0 && idx < appearHookList.size()) {
            ExpandListItem item = (ExpandListItem) appearHookList.elementAt(idx);
            if (item.getType() == ExpandListItem.GROUP) {
                item.setIfselected(!item.Ifselected());
                LoadList(); // 簡單粗暴刷新
            } else {
                // 葉節點處理:圖示切換、事件回調等
            }
        }
    }
}

效果圖:

TreeList 效果展示

註:究極方案仍是自繪 Canvas,但繼承 List 可快速產出可用原型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved