package com.sibvisions.javafx; import java.util.AbstractList; import java.util.List; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.collections.Sequence; import javafx.collections.ListChangeListener.Change; import com.sibvisions.util.ArrayUtil; public class DummyLoadOnDemandSequence extends AbstractList implements ObservableList { private List> list = new ArrayUtil>(); private Sequence sqCars; private int iLoaded = 20; public DummyLoadOnDemandSequence() { sqCars = FXCollections.sequence(); for (int i = 0; i < 10000; i++) { sqCars.add(new Car("T: " + i, "N" + i)); } } @Override public Object get(int index) { if (iLoaded -1 == index) { if (iLoaded < 10000) { final int iRow = iLoaded; iLoaded += 20; Platform.runLater(new Runnable() { @SuppressWarnings("unchecked") public void run() { ModelChange mchange = new ModelChange(DummyLoadOnDemandSequence.this, iRow); for (ListChangeListener lcl : list) { lcl.onChanged(mchange); } } }); } else { iLoaded = 10000; } } if (index >= sqCars.size()) { return sqCars.get(sqCars.size() - 1); } else { return sqCars.get(index); } } @Override public int size() { return iLoaded; } @Override public void addListener(ListChangeListener listener) { list.add(listener); } @Override public void removeListener(ListChangeListener listener) { list.remove(listener); } /** * A dummy change event. * * @author René Jahn */ private static class ModelChange extends Change { private int iRow; public ModelChange(ObservableList list, int pRow) { super(list); iRow = pRow; } @Override public int getFrom() { return iRow; } @Override public List getRemoved() { return null; } @Override public int getTo() { return iRow; } @Override public boolean wasPermutated() { // TODO Auto-generated method stub return false; } } /** * A simple POJO. * * @author René Jahn */ public static class Car { String type; String name; public Car(String pType, String pName) { type = pType; name = pName; } } }