【问题标题】:JavaFX ObservableList content binding [duplicate]JavaFX ObservableList 内容绑定
【发布时间】:2015-07-07 18:01:14
【问题描述】:

我知道你可以像这样创建一个列表绑定:

ObservableList list1 = ...;
ObservableList list2 = ...;

Bindings.createContentBinding(list1, list2);

但我想用一种特殊的方式来绑定它们。假设我有这些类型:

Object obj = ...;
MyObject myObj = new MyObject(obj);

还有这些列表:

ObservableList<Object> objList = ...;
ObservableList<MyObject> myObjList = ...;

每次在objList 中添加一个新对象时,我都希望在myObjListnew MyObject(obj); 中添加一个对象

您可以使用Bindings.create*Binding(...) 绑定其他属性,但似乎没有列表的等效项。

关于如何克服这个问题的任何想法?

【问题讨论】:

标签: java list binding javafx observablelist


【解决方案1】:
objList.addListener(e->{
    if(e.wasAdded)
    {
        if(myObjectList.size>=e.getFrom())
            myObjList.Add(new myObject(objList.get(objList.size-1)));
        else{
             myObjList.Add(e.getFrom(),new myObject(objList.get(e.getFrom()));
     }
    }
    if(e.wasRemoved)
    {
         myObjectList.Remove(e.getFrom());
    }   
    if(e.wasPermutated)
    {
         //handle this as well
    }
});

希望有帮助:)

已编辑以获取更改的对象,而不是假设添加了最后一个对象。还删除对象。那里可能有一些不合时宜的东西,因为我还没有编译并检查过它。如果是,请随时编辑它。希望它至少足以大致了解如何实施。

【讨论】:

  • 如果将它与索引一起添加到 objList 会发生什么!您会将最后一个元素添加到 myObjList 两次。
  • 或者如果你删除一个元素...?
  • 否则会发生任何其他事情,例如排列 :-)
  • e.wasAdded 防止触发移除等其他更改事件。 (我误解了 James_D 吗?)然而 NwDx 是正确的,所以我改变了我的答案来解释这一点。
  • 是的,你误解了(我和NwDx):如果你从源列表中删除一个元素,你需要确保相应的元素也从目标列表中删除。此外,@NwDx 指出,如果你这样做 objList.add(someIndex, someObject),你真的需要确保你不仅添加了正确的元素,而且将它添加到目标列表中的正确位置(你修复了一个部分,但不是其他)。并且您的新代码无法编译:getFrom() 返回 int... 这个问题无论如何都是重复的:链接的问题具有您解决方案的正确版本。
猜你喜欢
  • 1970-01-01
  • 2017-10-08
  • 2019-01-18
  • 2023-03-22
  • 1970-01-01
  • 2014-08-06
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多