Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            Документация для продвинутых пользователей
                Nifty GUI: Создание всплывающего меню

Nifty GUI: Создание всплывающего меню

Опубликованно: 22.08.2017, 16:41
Последняя редакция, Andry: 24.08.2017 18:37

Несмотря на то, что вы создаете и заполняете всплывающее меню(popup menu) на Java, вам по-прежнему нужен «placeholder» в вашем XML-файле. Элемент popup должен быть размещен вне любого экрана!

<useControls filename="nifty-default-controls.xml"/>
...
<popup id="niftyPopupMenu" childLayout="absolute-inside"
       controller="ControllerOfYourChoice" width="10%">
  <interact onClick="closePopup()" onSecondaryClick="closePopup()" onTertiaryClick="closePopup()" />
  <control id="#menu" name="niftyMenu" />
</popup>
...

Краткое объяснение некоторых приведенных выше атрибутов:

  • Идентификатор popup используется в вашем Java-коде, так что nifty знает, какой создатель всплывающего окна создать.
  • Контроллер сообщает Nifty, какой Java класс обрабатывает MenuItemActivatedEvent.
  • on(Вторичный/Третичный)Click сообщает Nifty о закрытии всплывающего окна, если пользователь не нажимает нигде кроме элементов меню (в этом примере вам нужно определить метод closePopup() самостоятельно, в экранном контроллере)
  • Идентификатор элемента управления используется классом Java для определения типа управления (т.е. Меню)

Java код в рамках вашей определенной реализации ScreenController:

private Element popup;
...
public void createMyPopupMenu(){
  popup = nifty.createPopup("niftyPopupMenu");
  Menu myMenu = popup.findNiftyControl("#menu", Menu.class);
  myMenu.setWidth(new SizeValue("100px")); // должен быть задан
  myMenu.addMenuItem("Click me!", "menuItemIcon.png",
    new menuItem("menuItemid", "blah blah")); // menuItem это пользовательский класс
  nifty.subscribe(
    nifty.getCurrentScreen(),
    myMenu.getId(),
    MenuItemActivatedEvent.class,
    new MenuItemActivatedEventSubscriber());
}

public void showMenu() { // метод запуска меню
  // Если это меню, которое будет использоваться много раз,
  // тогда вызовите это в своем конструкторе, а не здесь
  createMyPopupMenu()
  // вызывать всплывающее окно на экране по вашему выбору:
  nifty.showPopup(nifty.getCurrentScreen(), popup.getId(), null);
}

private class menuItem {
  public String id;
  public String name;
  public menuItem(String id, String name){
    this.id= id;
    this.name = name;
  }
}
  • Метод createMyPopupMenu() создает меню с заданной шириной, чтобы вы могли его заполнить.
  • Метод showMenu() вызывается чем-то, чтобы вызвать меню (т.е. Может клавишей или каким-либо другим методом).
  • Если вы хотите иметь доступ к всплывающей подсказке через свой идентификатор, вместо этого используйте createPopupWithId(id, id).

Чтобы обрабатывать события пунктов меню (т.е. Вызывать метод при нажатии на элемент меню), вы регистрируете (подписываете) реализацию класса EventTopicSubscriber<MenuItemActivatedEvent> на nifty экран и элемент.


Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.