2015-07-07 3 views
0

Я знаю, что вы можете создать список связывания следующим образом:JavaFX ObservableList содержание связывания

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

Bindings.createContentBinding(list1, list2); 

Но я хочу, чтобы связать их особым образом. Скажем, у меня есть эти типы:

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

И эти списки:

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

Каждый раз, когда новый объект в objList добавляется, я хочу один быть добавлен в myObjList с new MyObject(obj);

Вы можете свяжите другие свойства с Bindings.create*Binding(...), но, похоже, для списков не существует эквивалента.

Любые идеи о том, как преодолеть эту проблему?

+0

Для этого нет возможности построить. Посмотрите на [TransformationList] (https://docs.oracle.com/javase/8/javafx/api/javafx/collections/transformation/TransformationList.html), который может быть полезен для получения начальной точки. – NwDev

+0

На самом деле это довольно сложно сделать правильно. См. Http://stackoverflow.com/questions/31230312/best-practice-to-decorate-an-observablelist-and-retain-change-events/31277978#31277978 (это более или менее точный дубликат этого вопроса). –

ответ

0
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 
    } 
}); 

Надежда, что помогает :)

Edited, чтобы получить измененный объект вместо того, если предположить, что последний был добавлен. Также удаление объектов. Вероятно, есть некоторые из них, потому что я их не скомпилировал и не проверил. Не стесняйтесь редактировать его, если это так. Надеюсь, он, по крайней мере, достаточно хорош, чтобы получить общее представление о том, как это можно реализовать.

+0

И что произойдет, если он добавлен с индексом в objList! Вы добавите последний элемент в myObjList дважды. – NwDev

+0

Или если вы удалите элемент ...? –

+0

Или что-нибудь еще произойдет, например, перестановка :-) – NwDev

Смежные вопросы