【问题标题】:Checking the CustomItem in j2me support traversal or not检查j2me中的CustomItem是否支持遍历
【发布时间】:2012-04-17 14:04:02
【问题描述】:

检查j2me中的CustomItem是否支持遍历?

j2me支持遍历中的CustomItem如何检查?

【问题讨论】:

    标签: java-me midp lcdui


    【解决方案1】:

    Shiva,我认为您对遍历的理解存在一些差距。让我解释一下。

    您可以在表单中添加任意数量的项目。该框架为 MIDP 中内置的所有项目管理以下内容

    1. 所有项目的定位和渲染
    2. 滚动,当有更多的项目可以容纳在屏幕上时。
    3. 处理屏幕命令和项目命令。

    但是,当您扩展 CustomItem 并实现自己的项目时,完全控制权在于实现。考虑一个表单包含 TextField 和 CustomItemImpl 并且您希望在 TextField 和 CustomItemImpl 之间切换的情况。由于键处理、命令处理和渲染都在 CustomItemImpl 的控制中,因此必须有一种方法让框架知道您何时希望 TextField 具有控制权以及何时需要将控制权传递给 CustomItemImpl。

    这里是 CustomItem 中的 traverse() 方法的作用。当您在 CustomItemImpl 中完成渲染和捕获数据时返回 false,当您希望在 CustomItemImpl 中保留控件时返回 true。

    让我进一步详细说明。假设您正在实现一个 TreeItem。当焦点位于 TreeItem 上时,您希望执行以下操作:

    1. 选择一个节点
    2. 展开或折叠节点
    3. 导航节点

    以上所有功能都构成了 TreeItem 实现的一部分。但是,当您将 KEY_UP 移动到树的第一个节点或将 KEY_DOWN 移动到树的最后一个节点时,您希望移动到 TextField / 与此 TreeItem 相邻的任何其他项目。让框架知道你的意图的方式是

    1. 当焦点位于树的第一个节点上时选择 KEY_UP 时,在 traverse() 方法中返回 false
    2. 当焦点位于树的最后一个节点上时选择 KEY_DOWN 时,在 traverse() 方法中返回 false。

    希望这能澄清您的疑问。我强烈建议您查看这个特别的 example 以获得更具体的说明。

    【讨论】:

    • 感谢您的好意信息。但您的回答不清楚和简单。我无法理解,这让我感到困惑。请尽可能简单,尽可能清晰,尽可能易于理解的格式.
    • 让我试着让它变得简单。 CustomItem 将嵌入到表单中。但是绘画和事件处理不是由 Form 完成的,而是由 CustomItem 完成的。考虑 Form 包含一个 TextField 和 CustomItem。用户将使用向上键和向下键来选择 TextField 或 Form。除非 CustomItem 告诉 Form 它已经完成了它的工作,否则 Form 不会知道将您的关键事件移动到 TextField。因此,当您在 traverse 方法中返回 false 时,Form 将知道 CustomItem 已完成其工作并将焦点移至 TextField。
    • 参考您的原始问题,所有 MIDP 2.0 j2me 实现都支持遍历。
    【解决方案2】:

    我找到了解决方案。它对我有用。

    正确的解决方案是设备调用“javax.microedition.lcdui.CustomItem”类的方法“getInteractionModes()”来支持查找CustomItem遍历。

    下面给出代码sn-p

    int supported_interaction_modes=this.getInteractionModes();
    boolean horizontal__interaction,vertical_interaction;
    if((supported_interaction_modes&CustomItem.TRAVERSE_HORIZONTAL)!=0)        //Horizontal traverse support
      horizontal_interaction=true;
    else
      horizontal_interaction=false;
    if((supported_interaction_modes&CustomItem.TRAVERSE_VERTICAL)!=0)
      vertical_interaction=true;        
    else
      vertical_interaction=false;
    

    在上面的代码 sn-p 中,“this”是指派生自“javax.microedition.lcdui.CustomItem”的类的对象

    【讨论】:

      【解决方案3】:
      boolean isCustomItemSupported;
      try {
          Class.forName("javax.microedition.lcdui.CustomItem");
          isCustomItemSupported = true;
      } catch (Exception e) {
           isCustomItemSupported = false;
      }
      

      【讨论】:

      • 嗨 oxigen,感谢您的回复。我也想检查一下是否允许在 CustomItem 中移动。怎么做?
      • 这不是问题的答案。这仅检查手机上是否有 CustomItem。这充其量只能告诉应用程序平台是否为 MIDP 2.0!
      猜你喜欢
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      相关资源
      最近更新 更多