Както вече посочихте, извикването на 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