Mam problem... Inicjujac liste tworzę customowe callbacki, aby móc przechwytywac onChange, na obiektach listy. Robiłam to zgodnie z dokumentacją.

     members = FXCollections.observableArrayList();
     relations = FXCollections.observableArrayList(relationCallback());
    private static Callback<Relation, Observable[]> relationCallback() {
        return (Relation r) -> new Observable[]{
                r.idProperty(),
                r.typeProperty(),
                r.activeProperty(),
                r.leftProperty(),
                r.rightProperty(),
                r.getChildren()
        };
    }

Problem pojawia się gdy dodaje 2 pierwsze elementy. Generuje się ArrayIndexOutOfBoundsException;

Exception in thread "JavaFX Application Thread" java.lang.ArrayIndexOutOfBoundsException
	at java.lang.System.arraycopy(Native Method)
	at javafx.collections.transformation.FilteredList.addRemove(FilteredList.java:269)
	at javafx.collections.transformation.FilteredList.sourceChanged(FilteredList.java:144)
	at javafx.collections.transformation.TransformationList.lambda$getListener$15(TransformationList.java:106)
	at javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88)
	at com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:329)
	at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)
	at javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)
	at javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482)
	at javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541)
	at javafx.collections.ObservableListBase.endChange(ObservableListBase.java:205)
	at javafx.collections.ModifiableObservableListBase.add(ModifiableObservableListBase.java:155)
	at java.util.AbstractList.add(AbstractList.java:108)
	at gentree.client.desktop.domain.Family.addRelation(Family.java:85)

Po kolejnym dodaniu elementu do listy już jest wporzadku. Nie bardzo rozumiem skąd się to bierze. Gdy zastosuje taki customowy callback dla Membersa.. to jest dopiero dizwnie, bo wtedy Relation tworzy się podwójnie. Wszystko jest natomiast ok gdy nie mam tych customowych callbackow

Jeszcze jedna sprawa.. ten blad wyskakuje.. ale nie dzieje sie nic nieoczekiwanego.. wsyzskto wyswietla sie prawidlowo.

@Edit..

Troche jeszcze poszperalam.. i widze że przy dodaniu tego Callbacka.. moj listener na wasAdded wykonuje sie dwukrotnie. I za drugim razem jest ten blad.

    private void setRelationListener() {
        getCurrentFamily().getRelations().addListener((ListChangeListener.Change<? extends Relation> c) -> {
            while (c.next()) {
                if (c.wasAdded())  {
                    c.getAddedSubList().forEach(relation -> {
                        incrementRelationId(relation);
                        log.info(LogMessages.MSG_RELATION_ADD_NEW, relation);
                    });
                }
            }
        });
    }