【问题标题】:Codename One open side menu programatically代号一个以编程方式打开的侧边菜单
【发布时间】:2016-02-25 00:22:05
【问题描述】:

我正在尝试通过代码在我的应用上打开侧边菜单。
我的表单使用工具栏来填充带有更复杂组件的侧边菜单。
我用它来关闭菜单:

SideMenuBar.closeCurrentMenu();

但我找不到等效的打开函数。
我试过这个:

        if(f.getToolbar() !=null){
            MenuBar mb = f.getToolbar().getMenuBar();
            if(mb!=null){
                mb.showMenu();
            }    
        }

但它抛出一个空指针,因为它找不到任何命令(Toolbar.java 第 490 行)

堆栈跟踪:

java.lang.NullPointerException
at java.util.ArrayList.<init>(ArrayList.java:177)
at com.codename1.ui.list.DefaultListModel.<init>(DefaultListModel.java:65)
at com.codename1.ui.List.<init>(List.java:275)
at com.codename1.ui.Toolbar.createOverflowCommandList(Toolbar.java:490)
at com.codename1.ui.Toolbar$ToolbarSideMenu.createCommandComponent(Toolbar.java:799)
at com.codename1.ui.MenuBar.showMenu(MenuBar.java:692)
at com.startex.coffee.managers.forms.MyCardsController.lambda$setupButtonActions$5(MyCardsController.java:217)
at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:455)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:358)
at com.codename1.ui.Button.fireActionEvent(Button.java:411)
at com.codename1.ui.Button.released(Button.java:442)
at com.codename1.ui.Button.pointerReleased(Button.java:530)
at com.codename1.ui.Form.pointerReleased(Form.java:2578)
at com.codename1.ui.Form.pointerReleased(Form.java:2514)
at com.codename1.ui.Component.pointerReleased(Component.java:3119)
at com.codename1.ui.Display.handleEvent(Display.java:2017)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1065)
at com.codename1.ui.Display.mainEDTLoop(Display.java:994)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

【问题讨论】:

  • 你能发布NullPointerException的堆栈吗?行号不再与当前中继保持同步,因此我不知道发生了什么失败,尽管不需要向溢出菜单添加任何内容...
  • 下面接受的答案对我有用,但我已经添加了堆栈跟踪,以防它可以帮助你

标签: java codenameone


【解决方案1】:

SideMenuBar 具有非静态方法openMenu(String direction)。要打开一个普通的 SideMenuBar,你可以这样操作:

SideMenuBar smb = (SideMenuBar) Display.getInstance().getCurrent().getMenuBar();
smb.openMenu(null);

我想在你的情况下 f 是 Form 并且因为你正在使用 ToolBar 你必须在 getToolbar() 上调用 getMenuBar() 然后将其转换为 SideMenuBar 如下:

((SideMenuBar)f.getToolbar().getMenuBar()).openMenu(null);

请注意 openMenu() 方法有一个方向参数,我不完全确定它的作用。对我来说,它适用于 null。我认为如果您没有左侧菜单,则需要它,因为this link 可能会有所帮助。

【讨论】:

  • 是的,这对我有用。对于左侧(默认)菜单,它可以与 null 一起使用。就我而言,菜单在右侧,所以我不得不使用:((SideMenuBar)f.getToolbar().getMenuBar()).openMenu(COMMAND_PLACEMENT_VALUE_RIGHT); 其中 COMMAND_PLACEMENT_VALUE_RIGHT 来自 SideMenuBar 类。谢谢!
【解决方案2】:
  1. 空指针是由于空溢出命令导致的,所以在overflowmenu中添加一些命令,空指针被解决并显示overflowmenu

    工具栏工具栏 = new Toolbar(); f.setToolbar(工具栏);
    toolbar.addCommandToOverflowMenu(new Command("hi hi"));

  2. 要显示sidemenu添加以下代码

     SideMenuBar sideMenuBar= (SideMenuBar)Display.getInstance().getCurrent().getMenuBar();
     sideMenuBar.openMenu(null);
    

【讨论】:

  • 其实我的侧边菜单已经有命令了,问题是这个命令只会打开左边的菜单而我的在右边
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2011-03-09
相关资源
最近更新 更多