0

我被迫ObservableListJavaFx应用程序中使用 an,并且我List必须包含最多 1000 个项目。

所以我在考虑使用FIFO 系统,但我只看到了这个解决方案:

observableListData.add(...) //1001 item 
if (observableListData.size()>1000){
   observableListData.remove(0); // 1000 item
}

我在这个列表中添加了很多项目,所以我认为这不是限制我的大小的最佳方法ObservableList,还有其他方法吗?

编辑 :

要回答您的一些问题:

  • 我需要一个,ObservableList因为它链接到一个ListView.
  • 我必须使用 FIFO,因为我显示了这个列表的项目
4

3 回答 3

1

您可以通过以下方式扩展ModifiableObservableListBase,这是集合的基础,由 返回FXCollections.observableList

public class ObservableLimitedList<T> extends ModifiableObservableListBase<T> {
    private LinkedList<T> list;
    private int maxSize;

    public ObservableLimitedList(int maxSize) {
        this.maxSize = maxSize;
        list = new LinkedList<>();
    }

    @Override
    public boolean add(T element) {
        boolean result = super.add(element);
        if (size() > maxSize) {
            remove(0);
        }
        return result;
    }

    // delegate overrides:

    @Override
    public T get(int index) {
        return list.get(index);
    }

    @Override
    public int size() {
        return list.size();
    }

    @Override
    protected void doAdd(int index, T element) {
        list.add(index, element);
    }

    @Override
    protected T doSet(int index, T element) {
        return list.set(index, element);
    }

    @Override
    protected T doRemove(int index) {
        return list.remove(index);
    }
}

这是此实现的测试:https ://ideone.com/MMhnS6

于 2015-08-11T07:47:33.177 回答
0

没有办法告诉 ObservableList 本身限制它的大小。

这是该类和所有方法的详细信息的链接:

https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ObservableList.html

你能告诉我们你想做什么,为什么需要限制尺寸?也许有人会告诉你更好的解决方案。

于 2015-08-10T15:14:46.710 回答
0

对它进行子类化并覆盖 add 方法怎么样。在被覆盖的方法中使用你的 if 语句。

于 2015-08-10T15:17:07.467 回答