Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 如何知道单击了哪个菜单项?_Gwt - Fatal编程技术网

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

Gwt 如何知道单击了哪个菜单项?,gwt,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

我的代码是

          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);
请帮帮我,我得到答案了

    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%有效。

我似乎不是你从盒子里拿出来的东西。但您可以使用以下选项之一:

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

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

  • 命令执行:

    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
    构造函数传递
    MenuItem
    ,而是向名为
    setMenuItem
    MyCommand
    类添加一个方法:

    MenuItem newItem = new MenuItem("New", new MyCommand());
    ((MyCommand)newItem.getCommand()).setMenuItem(newItem);
    

    在GWT中,没有将侦听器添加到菜单的选项。。。。你能告诉我确切的密码吗