JavaFX How to - Handle change action for ObservableList








Question

We would like to know how to handle change action for ObservableList.

Answer

//from w ww.ja va2 s. c  om
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;

public class Main {
  public static void main(String[] args) {
    ObservableList<String> list = FXCollections.observableArrayList("one",
        "two");
    System.out.println(list);

    list.addListener(Main::onChanged);

    list.addAll("A", "B");
    System.out.println("After addAll() - list: " + list);

    list.remove(1, 3);
    System.out.println("After remove() - list: " + list);

    list.retainAll("one");
    System.out.println("After retainAll() - list: " + list);

    list.set(0, "ONE");
    System.out.println("After set() - list: " + list);
  }

  public static void onChanged(
      ListChangeListener.Change<? extends String> change) {
    while (change.next()) {
      if (change.wasPermutated()) {
        System.out.println("A permutation is detected.");
      } else if (change.wasUpdated()) {
        System.out.println("An update is detected.");
      } else if (change.wasReplaced()) {
        System.out.println("A replacement is detected.");
      } else {
        if (change.wasRemoved()) {
          System.out.println("A removal is detected.");
        } else if (change.wasAdded()) {
          System.out.println("An addiiton is detected.");
        }
      }
    }
  }
}