首页 > 解决方案 > javafx ListChangeListener.Change 抽象方法实现

问题描述

接口中的 Change 类中的方法nextgetFromgetTogetRemovedjavafx.collections.ListChangeListener ...被声明为抽象的。以下摘录来自界面。

public interface ListChangeListener<E> {

    public abstract static class Change<E>{
        public abstract boolean next();
        public abstract void reset();

        public void Change(ObservableList<E> list){
            this.list = list;
        }

        public abstract int getFrom();
        //... some more methods
    }
    public void onChanged(Change<? extends E> c);
}

如果我有一堂课来观察可观察列表的变化

import javafx.beans.Observable;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.util.Callback;

// A class to detect changes in an observable list
public class ChangeQuery {
    static IntegerProperty E1;
    static IntegerProperty E2;
    public static void main(String[] args) {
        Callback<IntegerProperty, Observable[]> extractor = (IntegerProperty p) -> {
        System.out.println("Extracted :" + p);
        return new Observable[] {p};
    };

    ObservableList<IntegerProperty> list = FXCollections.observableArrayList(extractor);

    list.addListener(ChangeQuery::onChanged);
    E1 = new SimpleIntegerProperty(11);
    E2 = new SimpleIntegerProperty(22);

    list.add(E1);
    list.add(E2);
    E1.set(111);
}

public static void onChanged(ListChangeListener.Change<? extends IntegerProperty> change) {
    System.out.println("GetList: " + change.getList());

    while (change.next()) {
        System.out.println(
                "index [" + change.getFrom() + "] to " + "[" + change.getTo() + "]" ); // change.getFrom() implementation 
        if (change.wasPermutated()) {
            System.out.println("Permutated is true");
        } else if (change.wasUpdated()) {
            System.out.println("Update == true");
        } else if (change.wasReplaced()) {
            System.out.println("removed and added == true");
        } else if (change.wasRemoved()){
            System.out.println("removed");
        } else if (change.wasAdded()) {
            System.out.println("Added");
        }
    }
}
}

例如,change.getFrom()方法是如何实现的。我检查了 javafx.collection 包,但没有发现这样的实现,或者我错过了一些东西。在此先感谢您的帮助。

标签: javajavafxobservablelist

解决方案


推荐阅读