Вот код:ChangeListener не давая правильное старое значение
package sample;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
/**
* Created by IDEA on 29/07/15.
*/
public class ListPropertyTest {
public static void main(String[] args) {
ListProperty<String> lp =
new SimpleListProperty<>(FXCollections.observableArrayList());
lp.addListener(new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
while(c.next()) {
String action = c.wasPermutated() ? "perm"
: c.wasUpdated() ? "upd"
: c.wasRemoved() ? "rem"
: c.wasAdded() ? "add" : "";
System.out.println("Action: " + action);
System.out.println("Removed: " + c.getRemoved());
System.out.println("Added: " + c.getAddedSubList());
}
}
});
lp.addListener(new ChangeListener<ObservableList<String>>() {
@Override
public void changed(ObservableValue<? extends ObservableList<String>> observable, ObservableList<String> oldValue, ObservableList<String> newValue) {
System.out.println("List changed.");
System.out.println("Old: " + oldValue);
System.out.println("New: " + newValue);
}
});
lp.addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
System.out.println("List invalid");
}
});
System.out.println("Add =========");
lp.addAll("one", "two");
System.out.println("Set =========");
lp.set(FXCollections.observableArrayList("two", "three"));
System.out.println("Remove ============");
lp.remove("two");
}
}
Результат:
Add =========
List invalid
List changed.
Old: [one, two]
New: [one, two]
Action: add
Removed: []
Added: [one, two]
Set =========
List invalid
List changed.
Old: [one, two]
New: [two, three]
Action: rem
Removed: [one, two]
Added: [two, three]
Remove ============
List invalid
List changed.
Old: [three]
New: [three]
Action: rem
Removed: [two]
Added: []
Как вы можете видеть, изменение слушателя вели себя корректно только в «Set» части.
ну, пока вы не указываете, что вы ожидаете, вы попадаете в глубокую яму, см. Мой комментарий к @James_D [ответ] (http://stackoverflow.com/a/31689191/203657) ;-) – kleopatra