Как мне узнать, какой пункт меню выбран? - PullRequest
0 голосов
/ 26 октября 2009

Мой код

          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 ]

2 голосов
/ 26 октября 2009

Я, кажется, не то, что вы получаете из коробки. Но вы можете использовать одну из следующих опций:

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

Или вместо передачи MenuItem через конструктор MyCommand добавьте метод к классу MyCommand с именем setMenuItem:

MenuItem newItem = new MenuItem("New", new MyCommand());
((MyCommand)newItem.getCommand()).setMenuItem(newItem);
0 голосов
/ 26 октября 2009

я получаю ответ

    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%

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...