2009-10-26 54 views
0

我的代碼是我如何知道哪個菜單項被點擊?

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

請幫我

+0

添加監聽器在菜單上。 – Geo 2009-10-26 11:11:51

+0

在GWT中沒有選項可以添加聽衆到菜單.... 你能告訴我確切的代碼 – 2009-10-26 11:16:41

回答

2

我似乎不是你開箱即用的東西。但是你可以在以下選項使用:

  1. MenuBar有一個受保護的方法getSelectedItem(),這將返回MenuItem應符合一個點擊。我不知道它爲什麼受到保護,但是通過擴展MenuBar類並將其公開,您應該可以使用它。

  2. 您可以創建一個Command類,在這裏你注入在創建MenuItem,在這種情況下,你需要設置命令創建之後,而不是在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添加一個方法來命名setMenuItemMyCommand類:

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

謝謝你的傢伙它的工作原理 – 2009-10-26 12:45:58

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%

相關問題