ObservableList JavaFX에 포함 된 객체의 변경 사항을 모니터링하는 방법


Answers

public static void main(String[] args) {
    ArrayList<Integer> intList = new ArrayList();
    intList.add(0);
    intList.add(1);

    ObservableList<Integer> ob = FXCollections.observableArrayList(intList);
    ob.addListener(new ListChangeListener<Integer>() {
        @Override
        public void onChanged(javafx.collections.ListChangeListener.Change<? extends Integer> c) {
            System.out.println("Changed on " + c);
            if(c.next()){
                System.out.println(c.getFrom());
            }

        }

    });

    ob.set(0, 1);
}

이벤트 (내 경우에는 c)는 (.getFrom ()을 할 때) 변경이 발생한 인덱스입니다. 또한 이벤트를 인쇄하면 무슨 일이 일어 났는지 정확하게 알려주는 문자열을 얻을 수 있습니다. 실수로 그것을 해석하면 전체적으로 목록에서 변경이 이루어집니다!

Question

ObservableList 객체가 JavaFX에서 작동하는 방식을 이해하는 데 어려움이 있습니다. 목록의 개체가 수정되었는지 모니터링하고 싶습니다. 지금까지는 목록 만 엔터티 자체로 수정했는지 모니터링 할 수 있지만 목록의 개체는 수정할 수 없습니다.

private ObservableList<Stuff> myList = FXCollections.<Stuff>observableArrayList();

    myList.addListener((ListChangeListener.Change<? extends Stuff> change) -> {
        while(change.next()){
            if(change.wasUpdated()){
                System.out.println("Update detected");
            }
            else if(change.wasPermutated()){

            }
            else{
                for (Stuff remitem : change.getRemoved()) {
                    //do things
                }
                for (Stuff additem : change.getAddedSubList()) {
                    //do things
                }

            }
        }
    });

이것을 할 수있는 방법이 있습니까? 나는 객체의 변경과 같은 이벤트의 워크 플로우를 찾고있다. =>리스트의 수정 =>리스트를 주요한 소스로 가지는 뷰에서 새로 고침 => 새로 고침.

감사