JavaFX Получить выбранный элемент ContextMenu?

Поскольку вы можете перемещаться по ContextMenu в JavaFX с помощью клавиш со стрелками, есть ли способ получить текущий выделенный / выбранный MenuItem?

Я в основном пытаюсь создать функцию автозаполнения, такую ​​как Outlook и т. Д., С адресами электронной почты, где вы начинаете вводить, и он дает предложения ниже, которые вы можете нажать вкладку, чтобы ввести выбранное действие меню без использования мыши.

Любая помощь приветствуется, спасибо.


person Zee Best    schedule 25.06.2017    source источник
comment
Я бы, наверное, попробовал реализовать это с ListView внутри Popup. Тогда стандартная модель выбора в виде списка предоставит вам то, что вам нужно.   -  person James_D    schedule 26.06.2017


Ответы (2)


Вместо этого попробуйте использовать поле со списком. он дает вам раскрывающийся список и дополнительное текстовое поле. Контекстное меню - это элемент меню, и вы можете реализовать модель выбора, только если вы поместите его в представление списка или таблицы.

person methu mwangi    schedule 25.06.2017
comment
Вы имеете в виду, например, создание ListView, а затем использование нового CustomMenuItem (ListView) для отображения списка? Проблема, с которой я сталкиваюсь, заключается в том, что тогда мне нужно изменить фокус из TextField, чего я не хочу. С помощью контекстного меню я могу перемещаться по нему, по-прежнему сосредоточившись на TextField, поэтому продолжая вводить, если я оборачиваю ListView, он либо фокусирует просмотр списка (требующий щелчка), либо TextFIeld. - person Zee Best; 26.06.2017
comment
Насколько мне известно, контекстное меню имеет ограниченную обработку событий. Вы не можете прослушивать фокус на элементе меню или в самом контекстном меню. из-за этого приложению сложно определить, какой элемент находится в фокусе. - person methu mwangi; 26.06.2017
comment
Нет возможности узнать это, расширив класс? Или проверив таблицу стилей, чтобы увидеть, есть ли у MenuItem сфокусированный атрибут? - person Zee Best; 27.06.2017

Вы можете получить выбранный пункт меню, добавив слушателя onAction в контекстное меню. Целью ActionEvent является выбранный пункт меню, который вы можете обработать дальше.

    contextmenu.setOnAction(e -> System.out.printly(((MenuItem)e.getTarget()).getText()));
person C.Kadura    schedule 06.06.2018