Подтвердить что ты не робот

Управление JavaFX 2.2 с нуля

Кто-нибудь знает, почему в Интернете так много примеров создания собственного пользовательского элемента управления в JavaFX с использованием классов SkinBase и BehaviorBase из com.sun? Почему они использовали? Почему в FXEnsemble нет такой реализации? Есть ли лучшие практики для этого? Можете ли вы дать некоторые объяснения, почему я должен использовать BehaviorBase и SkinBase для пользовательского управления? Заранее спасибо.

UPDATE:

Я наткнулся на это видео - http://www.parleys.com/#st=5&id=2789&sl=1, которое относится к созданию пользовательских элементов управления. Автор говорит о Public (Control & Skin) и Private API, и фактически Behavior - это Private API. Уместно ли использовать BehaviorBase и SkinBase из com.sun, которые не описаны в официальной документации?

ОБНОВЛЕНИЕ 2:

SkinBehaviour и JavaFX 8: http://mail.openjdk.java.net/pipermail/openjfx-dev/2013-February/005874.html

4b9b3361

Ответ 1

Оригинальный ответ

Существует критически важный запрос для улучшения поддержки создания пользовательских элементов управления, предназначенных для доставки для следующего основного выпуска JavaFX (JavaFX 8.0/JDK 8.0).

До тех пор, пока API-интерфейсы BehaviourBase и SkinBase не будут обнародованы, а другая работа, необходимая для создания ваших собственных пользовательских элементов управления (таких как определение пользовательских атрибутов CSS и псевдоклассов), будет представлена в качестве публичного API, лучший совет в отношении использования этих классов - Ричард Баир, ведущий на платформе JavaFX :

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

В любом случае, использование API-интерфейсов BehaviourBase и SkinBase, вероятно, лучше всего предназначено для элементов управления, создаваемых создателями библиотеки элементов управления (например, для создания проекта open-jfx для включения в базовый API JavaFX или проект jfxtras, связанный в предыдущем ответе). Многие повторно используемые компоненты приложения не требуют сложности, представленной с помощью этих классов.

Если вы не создаете общий элемент управления платформой для библиотеки, вам не нужно создавать подклассы Control, вероятно, лучше воспользоваться одним из следующих способов:

  1. Используйте существующий элемент управления и настраивайте его с помощью событий CSS и его открытого API.
  2. Подкласс существующего элемента управления для выполнения более радикальных изменений.
  3. Создайте свой собственный класс, который подклассирует контейнер, такой как Группа или подкласс Панели макета. В вашем подклассе обработайте макет и инкапсулируйте поведение нескольких узлов и элементов управления JavaFX.

Примеры создания настраиваемого компонента многократного использования из контейнера см. в разделе раздела настраиваемых компонентов документа Введение в FXML. Пример создания подкласса для существующего элемента управления см. в классе DigitalClock в этом примере часов JavaFX.

Обновление

После того, как я написал этот ответ, я просмотрел презентацию создания элемента управления, связанную с обновленным ответом, и он дал ту же рекомендацию, что и этот ответ. Я бы порекомендовал эту презентацию всем, кто интересуется темой создания элементов управления JavaFX.

Обновление от декабря 2014 года

Большая часть работы была проделана в Java 8 для создания общедоступных API-интерфейсов для создания элементов управления с использованием классов инфраструктуры JavaFX. Таким образом, можно создавать свои собственные пользовательские элементы управления, которые расширяют Control или подкласс Control и используют SkinBase. Такие элементы управления тогда похожи по структуре и API на встроенные элементы управления JavaFX, такие как Label, Button и т.д. Некоторая информация о том, как это сделать, документирована неофициальным образом в open-jfx wiki хотя Oracle еще не предоставила полную официальную документацию по созданию таких элементов управления на главной странице документации JavaFX.

Одна часть API, которая не была завершена как публичный API, - это класс BehaviourBase, обычно используемый для обработки некоторых кросс-платформенных реализаций для таких задач, как команды клавиш ускорения для элементов управления, однако вы все равно можете использовать базовые события обработки ключей JavaFX или сторонние разработчики. библиотеки, такие как ControlsFX Действие для реализации такого поведения, чтобы вашему коду не нужно было использовать частный API, который может измениться в будущем выпуске Java. Я считаю, что функциональность BehaviourBase в настоящее время планируется перенести в публичные классы API на таймфрейме Java 9.

Как указано в исходном ответе, если вы не создаете общий элемент управления платформой для библиотеки, вам не нужно создавать подкласс Control (это верно независимо от новых средств создания элементов управления в JavaFX 8 или 9).

Обновление марта 2016 г.

Для Java 9 было создано предложение по улучшению Java (JEP) и связанная с ним проблема отслеживания ошибок Java:

Целью этих усилий является:

Определите открытые API для элементов управления JavaFX UI и функциональности CSS, которые в настоящее время доступны только через внутренние API и, следовательно, станут недоступными из-за модульности.

Дополнительная информация об изменениях API для поддержки настраиваемых элементов управления приведена в документации по JEP и средству отслеживания ошибок.

Более ранняя версия доступа для Java 9, которая включает новые изменения API, доступна для загрузки и тестирования.

Обратите внимание, что общедоступный API-интерфейс поведения не является частью Java 9 и в настоящее время запланирован для реализации в Java 10:

Другие ресурсы

Если вам нужен глубокий ресурс по пользовательским элементам управления JavaFX, вы можете просмотреть книгу Хендрика Эбберса на эту тему (я не читал эту книгу):

Ответ 2

Возможно, вы захотите взглянуть на проект JFXtras (http://jfxtras.org). Там вы найдете множество пользовательских элементов управления JavaFX, которые будут использовать SkinBase и BehaviorBase. Исходный код элементов управления можно найти на github в https://github.com/JFXtras