Как вы уже сказали, вызов GetContextMenu()
возвращает null (что является большой подсказкой, что значение по умолчанию является деталью реализации), и если вы добавите дополнительный ContextMenu
, он появится поверх значения по умолчанию.
Попытка заменить контекстное меню следующим кодом:
ContextMenu cm = new ContextMenu();
cm.getItems().add(new MenuItem("Test"));
textbox.setContextMenu(cm);
Выдает следующий результат.
Переопределение события щелчка мышью также не будет работать, потому что вам все равно нужно будет получить доступ к контекстному меню по умолчанию через какое-то свойство, которое кажется невозможным.
Я также проверил ссылку CSS, чтобы увидеть, можно ли использовать ContextMenu
через одну из подструктур управления, но опять же это не дало никаких результатов.
Основываясь на этой информации, похоже, что значение по умолчанию ContextMenu
является деталью реализации элемента управления TextField
(или, возможно, его родительского классаTextInputControl
) и в настоящее время не может быть изменено.
Обновить
Я связался с Джонатаном Джайлсом (главным техническим специалистом Oracle в группе управления пользовательским интерфейсом JavaFX), который сказал мне подать отчет об ошибке.
Я просмотрел базу данных ошибок и нашел несколько существующих отчетов (RT-23213 и RT-24823), так что похоже, что это известная проблема. На сегодняшний день проблема все еще открыта и считается средней приоритетностью, но, видимо, она будет исправлена для FX 8.0.
Из комментариев к отчету об ошибке:
Контекстное меню по умолчанию создается обложкой элемента управления, которая в настоящее время не является общедоступным API. Нам нужно решить, должно ли и когда контекстное меню быть доступным через общедоступный API, но, вероятно, придется подождать более широкой работы, чтобы сделать скины более общедоступными.
person
Benjamin Gale
schedule
26.11.2012