JavaFX ObservableList is JavaFX SDK’s special implementation of List interface. It is basically an observable list that provides option to attach listeners for list content change. ObservableList has an integral role in the JavaFX development because it is used for major components like TableView, ComboBox, etc.
In this tutorial, we will explore the JavaFX ObservableList and see how we can utilize its special functionalities.
Creating and using ObservableList
You cannot instantiate an ObservableList class directly using a new call. Instead, FXCollections should be used to create an ObservableList. Let’s see how we can create an ObservableList of String type. The most common way to create it is using observableArrayList() function.
ObservableList<String> listInstance = FXCollections.observableArrayList(); //Add a single entry listInstance.add("Java"); System.out.println(listInstance); //Add multiple entries listInstance.addAll("Cpp", "C#", "Python"); System.out.println(listInstance); //Remove entry listInstance.remove("Cpp"); System.out.println(listInstance);
As you have already noted, the basic operations are similar to normal lists, except the addAll() function availability. You can add multiple entries to the ObservableList using comma separated values. The output of the above code is as follows.
[Java] [Java, Cpp, C#, Python] [Java, C#, Python]
Now, let’s see some special advanced features of the ObservableList.
Listening for changes in the ObservableList
ObservableList allows us to add listeners into the list so that we can execute some logic when the contents of the list is changed. In the previous code snippet, we have added system.out.println after each change we made into the list to print the list. Instead, we can actually attach a listener to the ObservableList
ObservableList<String> listInstance = FXCollections.observableArrayList(); //Add a ListChangeListener that will execute as soon as the contents of the list is changed. listInstance.addListener(new ListChangeListener<String>() { @Override public void onChanged(Change<? extends String> c) { System.out.println(listInstance); } }); //Manipulate contents of the list listInstance.add("Java"); listInstance.addAll("Cpp", "C#", "Python"); listInstance.remove("Cpp");
The output of the code snippet is given below. The “System.out.println(listInstance);” was executed three times, once after each list change.
[Java] [Java, Cpp, C#, Python] [Java, C#, Python]
ObservableList also provides a second type of listener called InvalidationListener. Unlike ListChangeListener that provides the actual change as a parameter to the onChanged function, it doesn’t provide the change. You can read more about it in the dedicated observable tutorial.
Getting values from the ObserableList is similar to getting value from normal lists in Java. To get an item at specific index, you can call “observableList.get(index)”. You can also get iterator through observableList.iterator() function.
Video Tutorial for JavaFX ObservableList
If you are interested in learning more about the ObservableList, please have a look into this ObservableList video tutorial. The video shows how to make use of the ObservableList for JavaFX ListView with realworld example.
ObservableList size change listener
Thanks to JavaFX Binding class, we can add listeners to some observable properties of the list, like the size of the list. This way, similar to how we tracked the list-content-change using a listener, we can also easily track the list size. Let’s adjust the above list content listener code to list size listener code and learn how to create a binding value to an ObservableList’s size and add a listener to it.
ObservableList<String> listInstance = FXCollections.observableArrayList(); //Listen for changes in list size IntegerBinding listSizeProperty = Bindings.size(listInstance); listSizeProperty.addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { System.out.println("Updated list size: " + newValue); } }); listInstance.add("something"); listInstance.addAll("something1", "random_data", "something2"); listInstance.remove("somethin3");
Output of the above code snippet is given below. As you can see, the size of the list is tracked and printed for each 3 changes we have made.
Updated list size: 1 Updated list size: 4 Updated list size: 3
Conclusion
In this tutorial, we have learned how to create and use ObservableList in JavaFX. It provides all the functionalities of normal Java lists along with cool observable support. You might also be interested in the other articles on JavaFX like JavaFX Scene Switch Animation and JavaFX Animation Tutorial.
[…] Источник […]
[…] Источник […]
… [Trackback]
[…] There you will find 12335 more Info on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] There you will find 82490 more Info to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Read More to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Read More Info here to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Read More Info here to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Here you will find 62441 more Information to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Read More on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More on to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Here you will find 93416 additional Information to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Information on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Info on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More here on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Info to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Read More Info here to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More Information here to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More Information here on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Info to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Read More Info here to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Here you will find 62284 more Information on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More here on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Info on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Read More on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Info on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Find More to that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Read More on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]
… [Trackback]
[…] Here you will find 55112 more Information on that Topic: genuinecoder.com/javafx-observable-list-tutorial/ […]