我怎么知道点击了哪个菜单项?

时间:2009-10-26 11:06:57

标签: gwt

我的代码是

          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 个答案:

答案 0 :(得分:2)

我似乎不是你开箱即用的东西。但您可以使用以下选项:

  1. MenuBar中有一个受保护的方法getSelectedItem(),这会返回与所点击的MenuItem匹配的MenuBar。我不知道为什么它受到保护,但通过扩展Command类并将其公之于众,您应该能够使用它。

  2. 您可以创建一个MenuItem类,在创建时注入MenuItem,在这种情况下,您需要在创建后设置命令,而不是在{{1}的构造函数中}}

  3. 命令实施:

    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));
    

    或者不是通过MenuItem构造函数传递MyCommand,而是将方法添加到名为MyCommand的{​​{1}}类中:

    setMenuItem

答案 1 :(得分:0)

我得到答案

    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%工作