2017-10-03 8 views
1

私はデータモデリングにObservableMapを使用しており、エントリ全体を更新したいと考えています。最初はObservableMapが空であり、多くの要素と非同期でいっぱいになります。Scala ScalaFX:Observableの大きな変更を扱う方法*

ここで問題は、すべてのエントリごとにonChangedイベントが発生し、イベントが多すぎてGUIの動作が遅くなることです。私はpkgs.clear() ; pkgs ++= newpkgsを使用しました。

onChangedのいずれかをトリガーするには、一時的にハンドラを無効にするか、すべての要素を更新した後でのみ実行するマップ上で操作を行う方法がありますか?

答えて

1

私はUIの更新を無効/遅延/バッファする仕組みには気づいていません。

私は他のJavaFXビュータイプについてはわかりませんが、これと同様の状況でTableViewを使用した経験があります。私は他の意見がこの点で似ているかもしれないと思う。

少なくともTableViewにはitemsPropertyというプロパティがあります。 itemsPropertyのデータがsetItemsitemsProperty.set(value)のラッパー)を使用して更新されると、テーブルは自己の最小スライスだけを更新することを非常に困難に試みます。

しかし、最適化が動作するため、キー項目は、「値オブジェクト」(hashCodeequalsは、いくつかのランダム参照深く、実際のデータに基づいて表示されているとはありません。)

でなければならないということですTableViewの場合は、これを精巧に行う必要があります。rowFactoryおよび cellFactoryの実装。その理由は、itemsのデータは決してフォーマットされていないか、TableViewの中の最適化を損なうためです。

上記を実現し、私の更新版の問題を解決しました。たぶん、他の答えは他のヒントを提供することができます。

+0

データ構造にダミー要素を追加し、このダミー要素が変更されたときに 'onChange'コードでいくつかのコードを実行するだけで良い解決策はありませんでした。最後に、更新を手動で開始します。このようにしても、何千ものonChangeイベントがトリガされますが、実際にはダミー要素を変更して手動で更新をトリガするときに限り、実際の更新が行われます。本当に最適ではありませんが、少なくとも解決策です。もちろん、このダミー要素をGUIコードの他の領域で考慮する必要があります:-( –

関連する問題