我的代码是
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 :(得分:2)
我似乎不是你开箱即用的东西。但您可以使用以下选项:
在MenuBar
中有一个受保护的方法getSelectedItem()
,这会返回与所点击的MenuItem
匹配的MenuBar
。我不知道为什么它受到保护,但通过扩展Command
类并将其公之于众,您应该能够使用它。
您可以创建一个MenuItem
类,在创建时注入MenuItem
,在这种情况下,您需要在创建后设置命令,而不是在{{1}的构造函数中}}
命令实施:
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%工作