JavaFX 9 -JEP 253 Skin API и несколько проблем

С выпуском Java JDK 9, как указано в JEP 253, классы, связанные с оболочками элементов управления JavaFX, перемещены из закрытого пакета. com.sun.javafx.scene.control.skin для общественности javafx.scene.control.skin,

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

Но все не так просто. Я нашел несколько проблем, которые я хотел бы, чтобы кто-то мог оправдать.

Первая проблема заключается в том, что, хотя сейчас есть публичный пакет javafx.scene.control.skin, нет общедоступного API для изменения или настройки скина. Это просто создать простую кнопку (это было также просто путем подкласса абстрактного класса SkinBase) но очень сложно настроить ColorPicker или TextField или более сложный контроль. Проблема в том, что мы, разработчики, не имеем доступа к более простым компонентам, составляющим сложный составной элемент управления. Добавьте тот факт, что с введением новой модульной системы очень сложно использовать отражение, это означает, что помимо простой настраиваемой кнопки или другого простого элемента управления очень трудно работать с интерфейсом Skin API.

Вторая проблема, которую я обнаружил, это ошибка в ComboBoxPopupControl учебный класс. Я хотел создать настроенную версию ColorPicker поэтому я создаю класс, который расширен ColorPickerSkin, Как я только что сказал, мне было очень трудно работать с этим классом, поэтому я делаю свой класс, чтобы расширить ComboBoxPopupControl (прямой подкласс ColorPickerSkin), что я нашел более чистым, чтобы создать из основы мой пользовательский палитры цветов. Но этот класс имеет ошибку, он поднимает NullPointerException Поскольку переменная с частной видимостью пакета не инициализирована. Эта переменная имеет тип ColorPickerBehaviourто, что в Java 8 было возможно инициализировать его, передавая vaule в конструктор, конструктор, который в Java 9 не принимает параметр этого типа.

Я хотел бы знать, работали ли вы или работаете, как я, используя этот API JavaFX, какое решение вы приняли или какое решение вы нашли.

0 ответов

Другие вопросы по тегам