Codename以编程方式打开一个侧边菜单

时间:2016-02-25 00:22:06

标签: java codenameone

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

SideMenuBar.closeCurrentMenu();

但我找不到等效的开放功能 我试过这个:

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

但它抛出一个空指针,因为它找不到任何命令(Toolbar.java line 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)

2 个答案:

答案 0 :(得分:3)

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可能有所帮助。

答案 1 :(得分:1)

  1. nullpointer是由于空溢出命令所以添加一些命令到overflowmenu并且空指针被解决并显示overflowmenu

    工具栏工具栏=新工具栏(); f.setToolbar(栏);
    toolbar.addCommandToOverflowMenu(新命令(“hi hi”));

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

     SideMenuBar sideMenuBar= (SideMenuBar)Display.getInstance().getCurrent().getMenuBar();
     sideMenuBar.openMenu(null);
    
相关问题