не удается найти поведение символов в базе данных (из javafx)

#java #javafx #package

Вопрос:

В проекте javafx, который я разветвил, используется класс BehaviorSkinBase из пакета com.sun.javafx.scene.control.skin . Это старый проект, поэтому я ожидал, что какой-то код будет устаревшим, но этот класс не отображается в списке устаревших.

На этом веб-сайте я нашел всю документацию о недостающем классе, но там нет исходного кода или версии javafx.

Я попытался создать проект с несколькими версиями javafx с официального сайта, но ни одна из них не решила проблему.

Этот класс используется для определения пользовательского слайдера с другим классом javafx.

 public class CustomSliderSkin extends BehaviorSkinBase<Slider, SliderBehavior>
 

Есть ли другой способ выполнить такого рода настройку, если этот класс определенно больше не используется ?

Комментарии:

1. Заменил комментарии ответом.

Ответ №1:

Использование внутренних com.sun API-интерфейсов не поддерживается публично в JavaFX

BehaviorSkinBase был com.sun api.

Он никогда не поддерживался как общедоступный API, поэтому мог изменяться без предупреждения или осуждения (что он и сделал).

Лучше всего , чтобы код любого пользовательского приложения не полагался на BehaviorSkinBase какой-либо другой com.sun API.


Приведенная выше информация является фактическим ответом на этот вопрос.

Приведенная ниже информация является информацией о пользовательских элементах управления JavaFX и вариантах реализации, поэтому ее можно игнорировать, если она не имеет отношения к вам в данный момент.

Варианты Реализации

Есть ли другой способ выполнить такого рода настройку, если этот класс определенно больше не используется?

Да, существует несколько вариантов, см. Шаги ниже.

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

Как переписать свой пользовательский слайдер

  1. Сравните пользовательский слайдер со стандартным слайдером JavaFX, если вы можете просто использовать стандартный слайдер вместо пользовательского, сделайте это.
  2. Если единственными изменениями в вашем пользовательском слайдере являются визуальный стиль, возможно, будет достаточно предоставить некоторые пользовательские CSS для оформления стандартного слайдера.
  3. Если пользовательский слайдер имеет иерархию узлов, отличную от стандартного слайдера, то, скорее всего, просто стилизация стандартного слайдера не приведет к его сокращению, вам нужно будет создать пользовательский скин.
  4. Если вам нужно создать пользовательский скин, затем посмотрите, можете ли вы подкласс SliderSkin, это позволит вам предоставить другую иерархию узлов и совершенно другие визуальные эффекты для слайдера, сохраняя при этом общедоступный API для класса слайдера.
  5. Если для вашего пользовательского слайдера требуется другой общедоступный API из класса слайдера, создайте новый подкласс элемента управления и новый подкласс оболочки (теперь вы создаете полностью пользовательский элемент управления с нуля).

Обратите внимание, что пользовательские элементы управления часто подходят для библиотеки элементов управления общего назначения, но часто для типичного приложения не требуются, поскольку приложению не требуется формальность интерфейса управления, и вместо этого оно может определять свой пользовательский интерфейс с помощью панелей макета и коллекций встроенных элементов управления, интегрированных вместе с помощью контроллера и, возможно, определенных с помощью FXML. Таким образом, большая часть кода приложения проходит только с шагом 1 или 2 из приведенного выше списка (например, с использованием стандартного слайдера, возможно, настроенного в look с помощью CSS).

Обработка поведения в вашем настраиваемом элементе управления

Если вы использовали существующую оболочку слайдера, она поставляется со встроенной реализацией поведения, которая является внутренним, а не общедоступным API, но, вероятно, достаточна для вас, и вам вряд ли потребуется ее изменять.

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

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

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

Историческая внутренняя реализация связывает поведение и кожу

См.раздел Изменение вики пользовательских элементов управления 4.

Изменение №4: У SkinBase больше нет общедоступной ссылки на API поведения.

Это было изменение с JavaFX 2 на 8. Скорее всего, код, с которым вы работаете, основан на версии JavaFX, которая давно устарела. Читайте также о коже по той же ссылке, это может вам помочь.

Справочная информация о поведении

Если вам интересно, текущий код поведения API находится по адресу:

Он не включает в себя BehaviorSkinBase, так как давным-давно понятия поведения и скинов были разделены в JavaFX. Поведение (насколько я понимаю) в основном предназначено для обработки отображения ввода с клавиатуры (хотя, вероятно, оно может делать и другие вещи). Многие из этих сопоставлений ввода зависят от целевой платформы, поэтому для пользователя Mac может использоваться другое сопоставление по сравнению с пользователем ПК, что позволяет вводить данные с клавиатуры в соответствии со стандартным использованием клавиатуры для целевой платформы. Поведение (я верю) помогает справиться с подобными особенностями.

Справочная информация о скинах

Скины представляют собой визуальный макет элемента управления. Подкласс управления определяет общедоступный API и часто абстрагируется от внутренней реализации оболочки. Это позволяет определить элемент управления, такой как счетчик, который может содержать стрелки вверх и вниз для изменения целого значения в пределах диапазона на ПК, но на сенсорном устройстве, таком как iOS, он может быть реализован в виде прокрутки в стиле rolodex. Интерфейс общественного контроля не меняется, но к элементу управления для разных платформ подключены разные реализации оболочки, позволяющие по-разному выглядеть и чувствовать себя в зависимости от целевого устройства.

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

Кроме того, оболочки всех встроенных элементов управления на платформе JavaFX доступны в виде общедоступного API в пакете javafx.scene.control.skin. Поэтому, если вы хотите предоставить новую оболочку для существующего элемента управления, вы можете расширить и переопределить существующую реализацию оболочки (что будет намного проще, чем создание пользовательского элемента управления с нуля, если настраиваемый элемент управления имеет функциональность, близкую к желаемому элементу управления).

Предыстория интеграции поведения/кожи

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

Платформа JavaFX реализует внутреннюю структуру поведения и систему для поддержки общедоступных элементов управления API в базовой платформе. Эта структура поведения является полностью частным API, хотя (в com.sun ) классах, и поэтому может быть изменена без предварительного уведомления.

Вы никогда не должны писать код, который зависит от com.sun классов из фреймворка JavaFX, так как в следующий раз, когда фреймворк будет выпущен для новой функции или исправления ошибок, он может нарушить ваш код, в отличие от общедоступного API, который стабилен и предоставляет предварительное уведомление о любых устаревших функциях.

Так что не полагаться на внутреннюю структуру поведения в JavaFX, вероятно, хорошо. Однако вы можете реализовать свое собственное поведение для пользовательских элементов управления, если они вам нужны. Для этого вы можете посмотреть реализацию встроенных элементов управления в исходном коде openjfx и эмулировать нужные элементы (либо путем копирования и вставки частного API в новые классы в вашем проекте, либо путем реализации поведения ввода для пользовательских элементов управления с нуля).

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

Ответ №2:

Итак, после многократной переустановки Java я обнаружил, что с Java sdk 8 код работает нормально, должно быть, я допустил ошибку в конфигурации.

Однако, как указано в комментариях jewelsea, эти технологии больше не поддерживаются, поэтому нецелесообразно продолжать проект с их использованием.