2017-10-03 10 views
1

데이터 모델링에 ObservableMap을 사용하고 있으며 전체 항목을 업데이트하려고합니다. 초기에 ObservableMap은 비어 있으며 많은 요소와 비동기 적으로 채워집니다.스칼라 ScalaFX : Observable *의 큰 세트를 다루는 방법

이제는 모든 항목에 대해 onChanged 이벤트가 발생하여 너무 많은 이벤트가 발생하고 GUI가 느려지 게됩니다. 나는 pkgs.clear() ; pkgs ++= newpkgs을 사용했다.

임시적으로 처리기를 사용하지 않도록 설정하거나 모든 요소를 ​​업데이트하지만 나중에 만 실행되는지도에서 작업을 수행하여 onChanged을 하나만 트리거하는 방법이 있습니까?

답변

1

UI 업데이트를 사용 중지/지연/버퍼링하는 메커니즘을 알지 못합니다.

다른 JavaFX보기 유형에 대해서는 잘 모르겠지만 유사한 상황에서 TableView을 사용해 본 경험이 있습니다. 이 관점에서 다른 견해가 유사하다고 생각합니다.

적어도 TableView에는 itemsProperty이라는 속성이 있습니다. itemsProperty의 데이터가 (itemsProperty.set(value)의 래퍼)을 사용하여 업데이트되면 테이블은 자체의 최소 슬라이스 만 업데이트하려고 매우 힘들어합니다.

그러나, 최적화가 작동하려면, 키는 항목이 "값 객체"(hashCodeequals는 어떤 임의의 참조 깊고 실제 데이터를 기반으로 표시되는 및 없습니다.)

에 있어야한다는 것입니다 TableView의 경우이 경우 정교한 rowFactorycellFactory 구현이 필요할 수 있습니다. 그 이유는 items의 데이터가 어떤 식 으로든 "사전 포맷"될 수 없거나 TableView 내부의 최적화를 망칠 수 있기 때문입니다.

위의 내용을 이해하면 업데이트 문제를 해결할 수 있습니다. 어쩌면 다른 답변이 다른 팁을 제공 할 수 있습니다.

+0

나는 지금 다음과 같은 좋은 해결책이 없다. 데이터 구조에 더미 요소를 추가하고, 더미 요소가 변경되었을 때'onChange' 코드에서 일부 코드 만 실행한다. 마지막으로 업데이트를 수동으로 트리거하십시오. 이 방법은 여전히 ​​수천 개의 onChange 이벤트가 트리거되지만 거의 멍청하다. 그리고 더미 요소를 변경하여 수동으로 업데이트를 트리거 할 때만 실제 업데이트가 발생한다. 실제로는 최적은 아니지만 최소한 솔루션입니다. 물론 GUI 코드의 다른 영역에서이 더미 요소를 고려해야합니다 .-( –