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中,没有将侦听器添加到菜单的选项。。。。你能告诉我确切的密码吗