代码之家  ›  专栏  ›  技术社区  ›  Tushar Ahirrao

如何知道单击了哪个菜单项?

gwt
  •  0
  • Tushar Ahirrao  · 技术社区  · 15 年前

    我的代码是

              VerticalPanel v1 = new VerticalPanel();
    
        Command comm = new Command() {
            @Override
            public void execute() {
                           // How i know that which menu item is cliked
            }
        };
    
        MenuBar menu = new MenuBar();
        menu.setWidth("500px");
        menu.setAnimationEnabled(true);
        menu.setAutoOpen(true);
        menu.addSeparator();
        MenuBar fileBar = new MenuBar(true);
        MenuBar editBar = new MenuBar(true);
    
        fileBar.addItem(new MenuItem("New", comm));
        fileBar.addSeparator();
        fileBar.addItem(new MenuItem("Open", comm));
        fileBar.addItem(new MenuItem("Save", comm));
    
        editBar.addItem("Edit 11", comm);
        editBar.addItem("Edit 11", comm);
    
        menu.addItem(new MenuItem("File", fileBar));
        menu.addItem(new MenuItem("Edit", editBar));
    
        v1.add(menu);
    

    请帮帮我

    2 回复  |  直到 15 年前
        1
  •  2
  •   Hilbrand Bouwkamp    15 年前

    我似乎不是你能摆脱困境的人。但您可以使用以下选项之一:

    1. MenuBar 有一个受保护的方法 getSelectedItem() ,这将返回 MenuItem 它应该与单击的匹配。我不知道为什么要保护它,但是通过扩展 菜单栏 类并将其公开,您应该能够使用它。

    2. 您可以创建一个 Command 类,在其中注入 菜单项 在创建时,在这种情况下,您需要在创建后设置命令,而不是在 菜单项

    命令执行:

    public class MyCommand implements Command {
    
      private final MenuItem item;
    
      public MyCommand(MenuItem item) {
        this.item = item;
      }
    
      @Override
      public void execute() {
        //item matches the item clicked.
      }
    }
    

    用途:

    MenuItem newItem = new MenuItem("New", (Command)null);
    newItem.setCommand(new MyCommand(newItem));
    

    或者不是通过 菜单项 通过 MyCommand 构造函数将方法添加到 我的命令 名为的类 setMenuItem :

    MenuItem newItem = new MenuItem("New", new MyCommand());
    ((MyCommand)newItem.getCommand()).setMenuItem(newItem);
    
        2
  •  0
  •   Tushar Ahirrao    15 年前

    我得到答案

        Command comm1 = new Command() {
            @Override
            public void execute() {
                Window.alert("New item is clicked");
            }
        };
    
        Command comm2 = new Command() {
            @Override
            public void execute() {
                Window.alert("Open item is clicked");
            }
        };
    
                    fileBar.addItem(new MenuItem("New", comm1));
    
                    fileBar.addItem(new MenuItem("Open", comm2));
    

    但是我们必须为它创建单独的对象…

    但我不认为这是完美的解决方案,但它能100%发挥作用。