Independent implementations of JavaFX properties?

Properties Java FX is a good API that allows a developer to create properties instead of using the standard semantics of the get / set method. It also adds a subscription to changes, support for property expressions for basic types and collections. Although properties exist in C # as part of the language, these properties are only available inside the JavaFX container. That is, if you try to listen to the changes , you will come across IllegalStateExceptionsaying that you need to run your listener code inside the main JavaFX thread.

So, is there an alternative available to the rest of the Java world?

Update

Here is an example IllegalStateException. Am I abusing the JavaFX API?

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("s1");
        list.add("s2");

        ObservableList<String> observableList = FXCollections.observableList(list);
        observableList.addListener(new ListChangeListener<String>() {
            @Override
            public void onChanged(Change<? extends String> change) {
                System.out.println("added: " + change.getAddedSubList());
            }
        });

        observableList.add("s3");
    }
}

An exception:

Exception in thread "main" java.lang.IllegalStateException
    at com.sun.javafx.collections.NonIterableChange.checkState(NonIterableChange.java:101)
    at com.sun.javafx.collections.NonIterableChange.getPermutation(NonIterableChange.java:81)
    at javafx.collections.ListChangeListener$Change.wasPermutated(ListChangeListener.java:156)
    at javafx.collections.ListChangeListener$Change.getAddedSubList(ListChangeListener.java:212)
    at Test$1.onChanged(Test.java:23)
    at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:134)
    at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:48)
    at com.sun.javafx.collections.ObservableListWrapper.callObservers(ObservableListWrapper.java:97)
    at com.sun.javafx.collections.ObservableListWrapper.add(ObservableListWrapper.java:154)
    at com.sun.javafx.collections.ObservableListWrapper.add(ObservableListWrapper.java:144)
    at Test.main(Test.java:27)
+4
1

JavaFX JavaFX, , , JavaFX, JavaFX.

JavaFX , :

Scene , Scene, Thread Application Application.

Java-, JavaFX, . , JavaFX, , .

Oracle JavaFX JavaFX , JavaFX JavaFX.

, . ObservableList . - ?

- .

, Java 8, :

"main" java.lang.IllegalStateException: : next() .

change.next(), , .

javadoc change.next() :

. next() . () .

:

import javafx.collections.*;
import java.util.*;

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("s1");
        list.add("s2");

        ObservableList<String> observableList = FXCollections.observableList(list);
        observableList.addListener(new ListChangeListener<String>() {
            @Override
            public void onChanged(Change<? extends String> change) {
                while (change.next()) {
                    System.out.println("added: " + change.getAddedSubList());
                }
            }
        });

        observableList.add("s3");
    }
}

:

added: [s3]
+4

All Articles