Пользовательская архитектура управления JavaFx - обработка фокуса и ключевых событий - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь создать пользовательские элементы управления для моего приложения JavaFx, и я немного заблудился в правильной архитектуре кода.

Я создал пользовательский элемент управления комбинированного списка, основанный на подробной настройке элемента управления по умолчанию ComboBox.Поскольку после настройки я не могу гарантировать общую функцию элемента управления как тип ComboBox (некоторые методы могут «испортить» мою настройку и т. Д.), Я подумал, что правильным способом является инкапсуляция с использованием этой архитектуры:

  1. Мой CustomComboControl расширяет Control, а не ComboBox.
  2. Содержит личное поле internalCombo, которое является моим настроенным экземпляром ComboBox.Внутренняя комбинация является частью пользовательского элемента управления, а не его оболочки, поэтому я могу легко получать данные из внутренней комбинации, делегировать элементы внутренней комбинации и т. Д.
  3. My CustomComboControl использует пользовательский Skin, который использует внутреннюю комбинацию из элемента управления в качестве корневого узла.

Это правильная архитектура? В целом это работает хорошо, но я столкнулся с некоторыми проблемами, которые не могу решить.

Фокус и ключевые события .Если я сохраню свой пользовательский элемент управления и внутреннюю комбинацию setFocusTraversable(true), при цикле фокусировки фокусировка удваивается (необходимо дважды нажать клавишу TAB, чтобы перейти к моему пользовательскому элементу управления).

Если я сделаю фокусировку только на внутреннем комбо, я не смогу прислушиваться к своему пользовательскому элементу управления (который иногда необходим).

Если я сделаю фокусировку только для пользовательского элемента управления, внутренняя комбинация не получит события клавиатуры, что нарушает ее функцию.

Какая архитектура правильная?(Я знаю, что этот вопрос, вероятно, слишком широкий.)

Вопрос отредактирован:

Во втором предложенном решении (только для скинов, доступных для обработки, но не для самого элемента управления) передаются ключевые события изнастраиваемый элемент управления для внутренней комбинации как-то возможен?

...