黑莓 - 如何创建子菜单?

2024-02-11

我想为 BB 应用程序创建子菜单 当我点击菜单项时它显示

Option 1
Option 2
Option 3

当我点击选项 3 时,它应该显示

1
2
3

作为子菜单项..

使用j2me+eclipse


一直想做这个)
替代文本 http://img380.imageshack.us/img380/3874/menugy.jpg http://img380.imageshack.us/img380/3874/menugy.jpg

class Scr extends MainScreen {
    SubMenu menu = new SubMenu();

    public Scr() {

        for (int i = 0; i < 3; i++) {
            SubMenu sMenu = new SubMenu();
            menu.add(new SubMenuItem(i + " item", sMenu));
            for (int k = 0; k < 3; k++) {
                SubMenu sSMenu = new SubMenu();
                sMenu.add(new SubMenuItem(i + "-" + k + " item", sSMenu));
                for (int l = 0; l < 3; l++) {
                    sSMenu
                            .add(new SubMenuItem(i + "-" + k + "-" + l
                                    + " item"));
                }
            }
        }

        add(new LabelField("testing menu", FOCUSABLE) {
            protected void makeContextMenu(ContextMenu contextMenu) {
                menu.mRectangle.x = this.getContentRect().X2();
                menu.mRectangle.y = this.getContentRect().Y2();
                Ui.getUiEngine().pushScreen(menu);

                EventInjector.invokeEvent(new KeyEvent(KeyEvent.KEY_DOWN,
                        Characters.ESCAPE, 0));
            }
        });
    }
}

class SubMenu extends PopupScreen implements ListFieldCallback {
    private static final int MAX_WIDTH = Font.getDefault().getAdvance(
            "max menu item text");
    XYRect mRectangle = new XYRect();
    Vector mSubMenuItems = new Vector();
    ListField mListField;

    public SubMenu() {
        super(new SubMenuItemManager(), DEFAULT_CLOSE);
        int rowHeight = getFont().getHeight() + 2;
        mListField = new ListField() {
            protected boolean navigationClick(int status, int time) {
                runMenuItem(getSelectedIndex());
                return super.navigationClick(status, time);
            }
        };
        mListField.setRowHeight(rowHeight);
        add(mListField);
        mListField.setCallback(this);
        updateMenuItems();
    }

    public void add(SubMenuItem subMenuItem) {
        mSubMenuItems.addElement(subMenuItem);
        subMenuItem.mMenu = this;
        updateMenuItems();
    }

    private void updateMenuItems() {
        int rowCounts = mSubMenuItems.size();
        mRectangle.width = getMaxObjectToStringWidth(mSubMenuItems);
        mRectangle.height = mListField.getRowHeight() * rowCounts;
        mListField.setSize(rowCounts);
    }

    private void runMenuItem(int index) {
        SubMenuItem item = (SubMenuItem) get(mListField, index);
        if (null != item.mSubMenu) {
            item.mSubMenu.setSubMenuPosition(getSubMenuRect(index));
            Ui.getUiEngine().pushScreen(item.mSubMenu);
        } else {
            item.run();
        }
    }

    private XYRect getSubMenuRect(int index) {
        SubMenuItem item = (SubMenuItem) get(mListField, index);
        XYRect result = item.mSubMenu.mRectangle;
        result.x = mRectangle.x + mRectangle.width;
        result.y = mRectangle.y + mListField.getRowHeight() * index;
        int testWidth = Display.getWidth() - (mRectangle.width + mRectangle.x);
        if (testWidth < result.width) {
            result.width = testWidth;
        }

        int testHeight = Display.getHeight()
                - (mRectangle.height + mRectangle.y);
        if (testHeight < result.height)
            result.height = testHeight;

        return result;
    }

    public void setSubMenuPosition(XYRect rect) {
        mRectangle = rect;
    }

    protected void sublayout(int width, int height) {
        super.sublayout(mRectangle.width, mRectangle.height);
        setPosition(mRectangle.x, mRectangle.y);
        setExtent(mRectangle.width, mRectangle.height);
    }

    private int getMaxObjectToStringWidth(Vector objects) {
        int result = 0;
        for (int i = 0; i < objects.size(); i++) {
            int width = getFont().getAdvance(objects.elementAt(i).toString());
            if (width > result) {
                if (width > MAX_WIDTH) {
                    result = MAX_WIDTH;
                    break;
                } else {
                    result = width;
                }
            }
        }
        return result;
    }

    public void drawListRow(ListField field, Graphics g, int i, int y, int w) {
        // Draw the text.
        String text = get(field, i).toString();
        g.setColor(Color.WHITE);
        g.drawText(text, 0, y, DrawStyle.ELLIPSIS, w);
    }

    public Object get(ListField listField, int index) {
        return mSubMenuItems.elementAt(index);
    }

    public int getPreferredWidth(ListField listField) {
        return mRectangle.width;
    }

    public int indexOfList(ListField listField, String prefix, int start) {
        return 0;
    }
}

class SubMenuItemManager extends VerticalFieldManager {
    public SubMenuItemManager() {
        super(USE_ALL_HEIGHT | USE_ALL_WIDTH);
    }

    public int getPreferredWidth() {
        return ((SubMenu) getScreen()).mRectangle.width;
    }

    public int getPreferredHeight() {
        return ((SubMenu) getScreen()).mRectangle.height;
    }

    protected void sublayout(int maxWidth, int maxHeight) {
        maxWidth = getPreferredWidth();
        maxHeight = getPreferredHeight();
        super.sublayout(maxWidth, maxHeight);
        setExtent(maxWidth, maxHeight);
    }

}

class SubMenuItem implements Runnable {
    String mName;
    SubMenu mMenu;
    SubMenu mSubMenu;

    public SubMenuItem(String name) {
        this(name, null);
    }

    public SubMenuItem(String name, SubMenu subMenu) {
        mName = name;
        mSubMenu = subMenu;
    }

    public String toString() {
        return mName;
    }

    public void run() {

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

黑莓 - 如何创建子菜单? 的相关文章

  • CSS/XHTML 菜单 - 在所有浏览器中工作 - IE6 帮助

    我发现这个菜单正是我想要的 它适用于所有现代浏览器和 IE 7 8 我需要找到一个修复程序才能在 IE6 中工作 任何帮助将不胜感激 http lab returnwt net htmlcss tabmenu http lab return
  • R Shinydashboard 根据选项卡选择显示/隐藏 UI 元素

    如果有人可以提供帮助 我正在努力满足要求 我必须根据用户的选项卡面板选择在仪表板侧栏上显示 隐藏一些元素 这是 UI 代码的一部分 可让您了解我的应用程序的结构 我需要仅在 tabpPanel 2 上显示 Fourthoutput Fift
  • [FLUTTER]滚动更改选项卡[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想构建这个用户界面 其中选项卡在某些滚动点上发生变化 请告诉我应该如何处理 是否有任何可用的包 UI LINK https www
  • 如何使用现代.fxml和controller.java在javafx 2.x中制作自动完成组合框[重复]

    这个问题在这里已经有答案了 如何使用现代 fxml 和controller java 在 javafx 2 x 中制作一个类似的自动完成组合框 就像制作这个一样 http blog ngopal com np 2011 07 04 auto
  • WPF (MVVM) 菜单中的互斥(且可绑定)复选框

    我试图找到一个在 WPF MVVM 应用程序的菜单中使用复选框的示例 该应用程序可以绑定到底层 ViewModel 类中的枚举 我有一个简单的例子 public class MyViewModel public MyViewModel co
  • 在 kivy 中嵌套小部件

    我正在尝试在 kivy 中制作一个界面 我认为即使在完成教程之后 我仍然不了解自定义小部件以及如何对它们进行层次结构的一些基本知识 我认为我有更多的盒模型 html 思维方式 因此小部件嵌套在本机 GUI 中的方式对我来说仍然有点陌生 一些
  • 切换“确定-取消”和“取消-确定”以强制用户交互?

    这是受到这个问题的启发确定 取消还是取消 确定 https stackoverflow com questions 50335 ok cancel or cancel ok 我记得在某处读到过有关在某些情况下切换 确定 取消 取消 确定 的
  • 给定背景颜色,如何获得使其在该背景颜色上可读的前景色?

    给定背景颜色 如何获得使其在该背景颜色上可读的前景色 我的意思是在程序中自动计算前景色 或者简化问题 如果前景色是从白色 黑色中选择的 那么在程序中如何进行选择呢 这是我用 Java 和 Javascript 做的一个 它是松散地基于thi
  • C# - 带 GUI 的后台应用程序

    我的问题是我想创建一个后台应用程序 但具有可以恢复并最小化到系统托盘的用户界面 并且它从窗口启动 我尝试搜索如何启动 但只找到有关 Windows 服务的线程 没有 UI 或创建表单并隐藏它 所以我的问题是我应该如何开始 Windows 窗
  • 在 Volley 中更新 UI 最有效的方法是什么

    最近我在 android 中使用 Volley 库 它工作得很好 但我想知道更新 UI 的最有效方法 我有一个包含所有 Volley 方法的 Utils 类 现在我传递了所有视图将作为参数更新 但我读到我可以在活动中实现侦听器 然后将它们作
  • 黑莓上的对话框背景颜色

    在我的应用程序中 如果 GPS 位置无效 我会显示警报 Dialog alert Current Location info not available 我想更改对话框警报的默认背景颜色和文本颜色 我需要透明的银色 如何在黑莓上创建自定义对
  • 找不到布局变小的原因

    这是我的代码 几乎按预期工作 在讨论问题之前 请先查看代码 请原谅我的代码很长 但这可以像 java 类一样粘贴 我使用 NETBEANS JForm 设计器来获取 GUI package test import java awt even
  • 使 Java JScrollpane 仅垂直滚动

    我希望我的整个 JFrame 能够垂直滚动 我添加了以下代码 但它只创建了一个水平滚动条 frame setContentPane new JScrollPane new GradeQuickResource 我想做相反的事情 我只想要一个
  • PySide / Python GUI 冻结

    我目前正在为 rvplayer 编写一个 GUI 它将使艺术家能够自动渲染带有板岩和老化信息的样片 GUI 使用 PySide 编写并使用 Python 2 7 编写脚本 我的问题是 在调用我的流程并更新我的QProgressBar使用 s
  • 创建连接到 facebook 的 j2me 应用程序(不是 swt 项目)

    我想创建一个简单的 j2me 应用程序作为开始 它与 facebook 链接 为了这 我从下载了 facebook apihttp kenai com projects facebookapime downloads http kenai
  • 不可勾选的单选按钮与专有的复选框

    从 UI 角度来看 是拥有一组具有取消选中功能的单选按钮更好 还是拥有一组独占的复选框 意味着一次只能选中一个 更好 Update 我没想到对此会有如此负面的反应 如果我给出一个更接近其使用方式的示例 也许会有所帮助 我有一个充满数据绑定内
  • Java - 直观地拖动摆动元素

    有没有类似的解决方案http allen sauer com com allen sauer gwt dnd demo DragDropDemo DragDropDemo html PaletteExample http allen sau
  • 设置滚动条粗细

    有没有办法调整滚动条的粗细JScrollPane 默认值有点笨拙 一个快速但又肮脏的解决方案是将宽度 高度明确设置为例如10 像素通过 jScrollPane getVerticalScrollBar setPreferredSize ne
  • GUI 测试工具 PyUseCase 与 Dogtail 相比如何?

    GUI测试工具如何Py用例 http pypi python org pypi PyUseCase重命名为故事文本 http pypi python org pypi StoryText 相比于Dogtail http en wikiped
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并

随机推荐