Codenameone 收听侧面菜单/汉堡菜单点击事件

Codenameone 收听侧面菜单/汉堡菜单点击事件,codenameone,Codenameone,我想检测一下什么时候点击了配菜菜单或汉堡菜单 下面是一个无法工作的裸体hello world项目的代码: Form hi = new Form("Hi World"); Toolbar bar = new Toolbar(); hi.setToolbar(bar); bar.addCommandToSideMenu(new Command("test 1")); bar.addCommandToSideMenu(new Command("test 2"))

我想检测一下什么时候点击了配菜菜单或汉堡菜单

下面是一个无法工作的裸体hello world项目的代码:

    Form hi = new Form("Hi World");
    Toolbar bar = new Toolbar();
    hi.setToolbar(bar);
    bar.addCommandToSideMenu(new Command("test 1"));
    bar.addCommandToSideMenu(new Command("test 2"));
    hi.addComponent(new Label("Hi World"));

    bar.getMenuBar().addPointerPressedListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent evt) {
           System.out.println("Side menu or Hamburner Menu is clicked");
        }
    });
    hi.show();
当我点击侧菜单或汉堡包菜单时,我希望看到打印的字符串。但事实并非如此

如何收听汉堡菜单点击事件

谢谢


3lix

由于工具栏只是表单顶部的BorderLayout容器,因此您可以找到侧菜单按钮并在其上添加侦听器

Button sideBtn = (Button)((BorderLayout)bar.getLayout()).getEast();

请注意,这是一个未记录的API,因此将来可能会中断,侧边按钮不是出于某种原因故意暴露的,重新考虑您试图执行的操作。

另一种方法是禁用侧边菜单图标,然后像我们在该模板中所做的那样自己添加按钮:

我不完全理解为什么侧边按钮没有故意暴露出来。我不明白为什么您不支持通过api调用来监听侧菜单事件。如果你能告诉我一个更好的方法,我会重新考虑我想做什么。简言之,我试图在侧菜单打开时将结束窗体着色,然后在侧菜单关闭时将其解开。为了着色/不着色,我正在填充玻璃窗格上的矩形。我的案例无论如何都不是一个阻碍展示的因素,但我喜欢视觉线索,暗示表单不在焦点中。请告诉我您是否有任何建议(更好地与我联系),或者如果您认为我们将来可能会为此提供API调用,如果事实上您看到其他人可能需要它的用例,请告诉我。我想补充一点,我还检测菜单何时打开,以便在侧菜单打开之前突出显示侧菜单中最后选定的选项/命令。到目前为止,我有两个常用的用例。我想你指的是getWest()。我只能参加一个活动。这是第一次工作,但随后停止工作:Button sideBtn=(Button)((BorderLayout)bar.getLayout()).getWest();sideBtn.addActionListener(新建ActionListener(){@Override public void actionPerformed(ActionEvent evt){System.out.println(“单击侧菜单或Hamburner菜单”);});我现在开始更了解你的担忧。我认为侧边按钮还附加了其他事件来打开/关闭侧边菜单。此外,菜单实际上是以不同的形式实现的,因此尝试在原始玻璃窗格上放置一些东西可能会很棘手。这听起来像是侧菜单本身的一个功能,我想当拖动时,这个颜色应该会改变它的alpha值。恐怕这需要对side菜单的实现进行一些调整,您可以在github上提交RFE或fork项目来实现它并发送pull请求。我想指出的是,如果side按钮由于某种原因没有公开,那么API应该通过提供一个监听器来进行补偿。GUI API为弹出菜单之类的事件提供监听器是相当标准的,而CodenameOne却没有这么做,这让人沮丧。侦听器方法还可以更容易地重写侧菜单代码,而不会破坏现有的应用程序。我还需要听副菜单事件,我不得不写一些乱七八糟的代码来绕过设计。一个迫使开发人员编写笨拙代码的API应该重新考虑一下。我明白了!这是一个非常有趣的方法!谢谢你的帮助。我认为你的回答解决了这个问题