`
muscle-liu
  • 浏览: 229628 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

j2mepolih 中获取 TreeItem 的多级节点

    博客分类:
  • j2me
阅读更多
用过 j2mepolish 的人一定知道,在 现在发行的 polish 2.0RC4 版本里有一个 TreeItem 的 component。 TreeItem 可以动态实现一个多级节点的树结构,而且其节点是一个 Item(只要是 polish 里边的 Item 都可以,如 StringItem, IconItem ..), 同时 TreeItem 是一个 Item 很容易被 j2me 里的高级UI调用。 但是在现有的版本中,TreeItem 里边的方法 getFocusedItem/getFocusedIndex 返回的是第一级结点,并不能返回 2+ 级结点。如下边的一个树结构(设名为: treeItem):
A
  A1
  A2
  ...
B
  B1
  B2
  ...

当光标(焦点)在 A 或是在 A1/A2 时, treeItem.getFocusedItem()都是返回 A,而 treeItem.getFocusedIndex() 返回的是0;同理,当光标(焦点)在 B 或是在 B1/B2 时,这两个方法返回是分别是 B 和 1;

研究了一下 polish 里边的 TreeItem.java 源文件, 发现里嵌套了一个结点类 Node, 这个 Node 类其实就是一个 Item 类的一个子类, 里边主要有一个叫 children 的属性(是一个 Container,而 Container 相当于 Java 中的 List),用来保存当前结点的子结点。所以我们调用 getFocusedItem() 里并没有具体深入到其子结点里边,只是获取的第一级结点。下边是我对获取第二级以上结点添加的一个方法:
public Item getExactItem(Item item){    
    if( item instanceof Node && item != null){
        if( ((Node)item).children.size() != 0){
            item = ((Node)item).children;
            if(item instanceof Container){
               return getExactItem( ((Container)item).getFocusedItem() );
            }
        } 
    }

    return item;
}


只要我们把 treeItem.getFocusedItem() 得到的 Item 做为参数代入上边方法就可以获得 TreeItem 的真正焦点 Item。如上边的 treeItem, 当光标(焦点)在 A1 时,treeItem.getExactItem( treeItem.getFocusedItem() ) 得到的是 A1 了。

而对于怎样修改 polish 源文件,本人方法如下: 在 polish 安装目录下的 lib 里边有个 enough-j2mepolish-build.jar 的包(其实这是build.xml文件里边<taskdef> 的classpath属性里必要的一个包),里边有 polish 各component 的源文件。 用 RAR 的方式打开 enough-j2mepolish-build.jar,进入相应路径(注意这里并不是解压出来,你修改时可以另外解压出来修改), 把修改好的 TreeItem 源文件, 直接添加替换旧的就可以了。修改后,在IDE里边或许会显示找不到这个方法,但是编译是可以通过的(因为polish工程编译时是调用 enough-j2mepolish-build.jar 里的源文件编译的)。
分享到:
评论

相关推荐

    jstree javascript js tree treeitem j2ee java

    "treeitem" 是树形结构中的一个元素,通常代表树中的一个节点。 **描述分析:** 描述中提到,jstree 是一个思维清晰、代码注释详尽的解决方案。这意味着对于开发者来说,无论是初学者还是有经验的程序员,都能够...

    listview 显示多级树型结构

    这可以通过在`TreeItem`类中实现递归方法来完成,逐级加载子节点列表。 7. **性能优化** 对于大型数据集,一次性加载所有节点可能导致性能问题。可以采用懒加载策略,只在用户首次展开节点时加载其子节点,或者...

    树的节点添加,下载

    Flex Tree由一系列的TreeItem对象组成,每个TreeItem代表树中的一个节点。节点可以有子节点,形成树的层级结构。开发者可以通过设置`dataProvider`属性来指定数据源,数据源通常是ArrayCollection或...

    QTreeView实现节点拖动.zip

    本示例"QTreeView实现节点拖动.zip"着重展示了如何扩展`QTreeView`的功能,使其支持节点的拖放操作,这在数据管理、分类或重组等场景中非常实用。下面我们将详细讨论如何实现这个功能。 首先,要实现节点拖放,我们...

    TREEITEM DOWNLOAD

    2. **插入节点**:`InsertItem()`函数用于向树形控件中添加新的项。你需要指定父节点(如果有的话)、文本、图像索引等信息。 3. **设置节点图标**:为了使树形控件更直观,我们可以为不同的节点分配不同的图标。这...

    Android Recyclerview实现多级树形列表

    本示例“Android RecyclerView实现多级树形列表”旨在教你如何在RecyclerView中构建一个能够展示层级关系数据的列表。这样的列表常用于展现目录结构、组织架构或者分类信息等。 首先,我们要理解RecyclerView的基本...

    Android代码 QQ多级列表框

    2. **层次结构处理**:在Adapter中,你需要实现逻辑来处理数据的层次结构。当用户点击某个条目时,你应该能够展开或折叠其对应的子项。这可能涉及到改变数据模型的状态,并通知Adapter更新视图。 3. **视图复用与...

    swt Tree 例子项目代码

    2. **`TreeItem`**:`TreeItem`是`Tree`的子项,代表树中的一个节点。你可以通过`TreeItem`来操作节点,如设置文本、图像、获取子项等。`TreeItem`还支持事件监听,例如选择事件和扩展事件。 3. **`TreeViewer`**:...

    smartGwt 树(tree) 增删改

    TreeItem childItem2 = new TreeItem("子节点2"); rootItem.addItem(childItem1); rootItem.addItem(childItem2); tree.setRootItem(rootItem); ``` 这段代码创建了一个包含两个子节点的树。 2. **数据绑定**...

    gwt 中实现简单的树状菜单

    - 将TreeItem添加到Tree中,通过调用`add()`方法将TreeItem作为子节点添加到父节点。 ```java Tree tree = new Tree(); TreeItem root = new TreeItem("根节点"); tree.addItem(root); ``` 2. 展开和折叠: - ...

    winform 无限级树形菜单

    - 在Winform应用程序中加入自定义控件,并设置合适的属性,如节点数据源、初始展开级别等。 - 进行充分的测试,确保各种操作如添加、删除、展开、折叠、搜索等都能正确无误地执行。 通过以上步骤,我们就可以实现...

    TreeTableView

    `TreeView`通常用于显示单一级别的数据,而`TreeTableView`则可以在同一视图中展示多级嵌套的数据。`TreeItem`是树结构中的基本单元,它包含了显示的文本、相关数据以及子`TreeItem`的集合。 创建一个`...

    android中TreeView运用实例源码可运行,Android studio版本

    在`AndroidTreeView`库中,核心类是`TreeView`,它是一个自定义的`ViewGroup`,可以添加`TreeItem`(通常继承自`BaseTreeItem`)作为子节点。`TreeItem`可以包含文本、图标等元素,并且可以通过点击事件处理子节点的...

    vue+ java 实现多级菜单递归效果

    在本文中,我们使用了 Vue 官方示例代码来实现多级菜单递归效果。Vue 官方示例代码提供了一个树形视图的示例代码,我们可以使用这个示例代码来实现我们的多级菜单递归效果。 二、Java 封装数据 在本文中,我们使用...

    《使用UITableView实现树视图》一文源代码

    - 在`cellForRowAt:`中,根据当前行的索引获取对应的`TreeItem`,并配置单元格,包括设置标题和箭头状态。 4. 展开与折叠逻辑: - 当用户点击单元格时,更新对应`TreeItem`的展开状态,并调用`reloadData`刷新...

    iOS下实现的树形列表结构

    2. **数据源与代理**:在UITableView中,数据源(`UITableViewDataSource`)负责提供单元格的数量和内容,而委托(`UITableViewDelegate`)处理用户交互。你需要重写`numberOfSectionsInTableView`、`tableView:...

    flex iFrame的tree控件连接到相应的网页

    2. 创建iFrame组件:然后,添加一个IFrame组件到界面中,并设置初始源为空或者默认网页。 ```xml ``` 3. 监听Tree点击事件:在Tree的click事件中,我们需要获取被点击节点的数据,然后根据数据中的URL设置iFrame...

    Zk TreeMode

    在`MyTreeModel`的构造函数中,我们通常会获取到要展示的数据列表,如通过调用`acc.findAll()`获取数据。 - `getRoot()`:返回树的根节点,通常是一个虚拟的顶级节点,可以为空或包含实际数据。 - `getChildCount...

    JavaFX TreeView数据库加载Node的实例

    在JavaFX中,我们可以通过创建TreeItem对象并设置其值来创建节点。如果一个TreeItem有子节点,我们可以使用`setChildren()`方法添加它们。 在数据库加载方面,通常会使用JDBC(Java Database Connectivity)来连接...

Global site tag (gtag.js) - Google Analytics