【问题标题】:Java ListChangeListener WasUpdated() doesn't workJava ListChangeListener WasUpdated() 不起作用
【发布时间】:2015-06-10 08:09:50
【问题描述】:

我想在 observableList 中修改名为 EventShowable 的对象时触发一些代码。 这是我的代码。

                mainApp.getCalendars().get(i).getListEvents().addListener(new ListChangeListener<EventShowable>() {
                @Override
                public void onChanged(ListChangeListener.Change<? extends EventShowable> c) {
                    while (c.next()) {
                        if (c.wasUpdated()) {
                          //this doesn't work.
                          //perform updated

                        }
                        if (c.wasAdded()){
                            //perform something }

wasAdded() 执行良好,但 wasUpdate() 则不行。 修改 EventShowable 后如何获得有效的东西?谢谢

P.S:在 JavaDoc 中: 公共布尔 wasUpdated() 表示 getFrom()(包括)到 getTo() 排他之间的元素发生了变化。 这是唯一可选的事件类型,可能不会被所有 ObservableLists 触发。 https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ListChangeListener.Change.html#wasUpdated--

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    使用extractor 创建您的列表。

    您还没有真正提供足够的细节来给出完整的答案,但是如果您的EventShowable 定义了诸如

    之类的属性
    public class EventShowable {
        public IntegerProperty xProperty() { ... }
        public StringProperty yProperty() { ... }
        // ...
    }
    

    然后创建一个列表,当您更改 xy 时触发更新事件

    ObservableList<EventShowable> listEvents = 
        FXCollections.observableArrayList(eventShowable ->
            new Observable[] { eventShowable.xProperty(), eventShowable.yProperty() });
    

    【讨论】:

    • 谢谢,我的 EventShowable 只包含属性。但是我必须把 ObservableList listEvents=... 的代码放在哪里?在我的 EventShowable 类中还是在 c.wasAdded() 附近的代码中?我不明白这段代码是做什么的。
    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 2014-11-23
    • 2017-08-26
    • 2016-08-28
    • 2012-07-21
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多