Статьи

Миграция с JavaFX 1.3 на JavaFX 2.0

Несколько дней назад я закончил миграцию исходного кода Modellus из скрипта JavaFX 1.3 на язык JavaFX 2.0 Java. Поэтому я подумал, что было бы неплохо написать о том, что я узнал в процессе.

Я хотел бы отметить, что если вы хотите продолжать использовать скрипт JavaFX в JavaFX 2.0, вы можете использовать Visage: http://code.google.com/p/visage/

  1. Класс CustomNode больше не существует. Расширьте Группу или Регион, чтобы создать «пользовательские узлы».
  2. Больше нет блоковМышь.
    В javafx 2.0 события мыши принимаются только самым верхним узлом.
    В Node также есть новый метод: setMouseTransparent (boolean). События мыши на узле с mouseTransparent, установленным в true, будут игнорироваться и перехватываться самым верхним узлом ниже.
  3. Используйте свойства для привязки значений.
    Javafx 2.0 имеет набор классов, которые вы можете использовать для привязки значений друг к другу. Для каждого типа примитива существует класс — SimpleBooleanProperty, SimpleDoubleProperty и т. Д., А для ссылочных типов вы используете экземпляр свойства объекта, например, если вы хотите связать цвета, вы можете использовать SimpleObjectProperty <Color>.
  4. Не все переменные из API являются «связываемыми».
    В скрипте Javafx 1.3 вы можете связываться с любой переменной API. В языке javafx 2.0 это означает, что все переменные из API должны быть доступны как свойства. Но это не тот случай, например, Bounds, LinearGradient, Stop являются примерами классов, у которых нет свойств, поэтому вы не можете напрямую связываться с их полями. В этих ситуациях вам нужно использовать другие методы, такие как низкоуровневое связывание .

    Например, предположим, что вы хотите привязать переменную к ширине границ макета узла. Поскольку ширина поля Bounds недоступна как свойство, вам придется сделать что-то вроде этого:

    В скрипте Javafx:

    1
    float nameLabelXPosition = bind - nameLabel.layoutBounds.width / 2;

    В JavaFX2.0 Java языке:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    nameLabelXPosition.bind(new DoubleBinding() {
     
        {
     
            super.bind(nameLabel.layoutBoundsProperty());
     
        }
     
        @Override
     
        protected double computeValue() {
     
            return nameLabel.getLayoutBounds().getWidth() / 2;
     
        }
     
    });
  5. Когда вы использовали блоки инициализации скрипта javafx, теперь вы можете использовать компоновщики javafx.
    Однако в скрипте javafx вы можете использовать привязку в блоке инициализатора, на java вы не можете сделать это со сборщиками. Только в JavaFX 3.0 (Lombard) вы сможете сделать это: http://javafx-jira.kenai.com/browse/RT-13680 . Таким образом, всякий раз, когда вы использовали привязку к блокам инициализатора скрипта javafx, вы не можете использовать компоновщики в java javafx 2.0.
  6. Больше нет поддержки на уровне языка для последовательностей на Java Java 2.0.
    Где бы вы ни использовали последовательности, вы теперь будете использовать ObservableLists. Для создания ObservableLists вы можете использовать методы создателя FXColections, там вы найдете все виды методов для создания ObservableLists, даже пустые.
    Последовательности, присутствующие в API, были преобразованы в ObservableLists. Например, если вы хотите вставить узел в группу, вам нужно получить его дочерний объект ObservableList и затем вызвать метод add для него. Вот так: .getChildren (). Add (Node)
  7. Нет больше типов функций.
    Поскольку только в java8 будет поддержка Closures, команда Oracle полагалась на использование типов SAM. Это класс только с одним абстрактным методом, который вам придется переопределить (Single Abstract Method). Вы можете использовать ту же стратегию, что и Oracle, и писать типы SAM везде, где вы используете функциональные объекты.
  8. Нет больше триггеров.
    Замените триггеры слушателями смены. Вы можете назначить прослушиватель изменения свойству, которое аналогично назначению триггера в сценарии javafx.
  9. Нет больше переопределений переменных на подклассах.
    Для них у вас не будет замены на java, лучшее, что вы можете сделать, — это переназначить значение переменной в подклассе. Но это не то же самое, поскольку были вызваны переопределяющие переменные, присвоенные значения перед блоками инициализатора суперкласса.

Для дальнейшего чтения по этой теме оформить заказ:

http://weblogs.java.net/blog/opinali/archive/2011/05/28/javafx-20-beta-first-impressions

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

Ссылка: Миграция с javafx 1.3 на javafx 2.0 от нашего партнера JCG Педро Дуке Виейры в блоге Pixel Duke .

Статьи по Теме :