Статьи

JavaFX Совет 5: будьте заметны

Даже в это время полного надзора над NSA все еще хорошая идея реализовать ваши элементы управления JavaFX с учетом наблюдаемости. Этого легко достичь в JavaFX, особенно по сравнению с Swing.

Старые дни

Исходя из Swing, я привык тратить много энергии и времени на то, чтобы сделать пользовательские элементы управления видимыми. Обычно требуется добавление методов для добавления и удаления слушателей определенного типа. Этот тип слушателя был новым интерфейсом, единственный метод этого интерфейса принимал новый объект события. Чтобы отправить этот объект события, элемент управления должен был «запустить» его внутри моего пользовательского элемента управления, поэтому я в итоге написал методы fireXYZ (). Много работы только для того, чтобы кто-то знал, что какой-то аспект состояния элемента управления изменился.

Новый век

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

Код котельной

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
public final BooleanProperty showStuff =
     new SimpleBooleanProperty(this, "showStuff", true);
 
public final BooleanProperty showStuffProperty() {
   return showStuff;
}
 
public final boolean isShowStuff() {
   return showStuff.get();
}
 
public final void setShowStuff(boolean show) {
   showStuff.set(show);
}

И да, вы должны следовать именно этому соглашению кодирования. Для свойства с именем xxx предоставьте метод доступа к свойству с именем xxxProperty (), метод set с именем setXXX () и метод get с именем getXXX (). Это способ, которым он используется в JavaFX, и вы должны придерживаться его.

При работе с коллекциями вы обычно получаете по крайней мере такой код:

1
2
3
4
5
6
private final ObservableList<String> names =
     FXCollections.observableArrayList();
 
public final ObservableList<String> getNames() {
   return names;
}

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

Слушатели

Теперь, когда наши управляющие атрибуты являются свойствами, мы можем легко реагировать на изменения состояния, добавляя к ним слушатели (используя лямбда-выражения).

1
2
3
4
5
myControl.showStuffProperty().
   addListener(it -> showStuffChanged());
 
myControl.getNames().
   addListener((Observable observable) -> namesChanged());

Вывод

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

Ссылка: JAVAFX СОВЕТ 5: НАБЛЮДАЙТЕ ОТ нашего партнера JCG Дирка Леммермана в блоге Pixel Perfect .