0

JUNGまたはPrefuseのいずれかを使用してGraphMLソースファイルからグラフをレンダリングしています。ここで、別のプログラムがこのソースファイルを新しいノードとエッジで定期的に更新します。これらの変更も反映するようにグラフを更新したいと思います。両方のAPI自体で、これを実行できるものが見つかりません(適切なrefresh(TIMER)またはredraw(TIMER)の種類のメソッドがありません)。これを行う1つの方法は、しばらくしてJFrameを終了し、データの読み込み、視覚化、レンダリングのプロセス全体をやり直すことですが、それは私には適切ではないようです。

だから問題は、これをできるだけ簡単かつ迅速に行うための最良の方法は何ですか?ありがとう :)

4

2 に答える 2

1

ソースファイルを「定期的に」チェックしてください。ファイルのハンドルfを握っている場合は、クエリf.lastModified()を実行できます。最後にチェックしてから他のプログラムがダーティな作業を行っている場合は、更新してください。他のプログラムが更新ファイルのみを書き込んでいた場合も同様の解決策が適用されます(その変更を行う権限がある場合は賢明です-読み取るファイルが少なく、モデルで何を変更するかを正確に把握しているなど)。

「定期的に」は少し粘着性のある改札です-あなたのケースはおそらく「X(ミリ)秒ごと、チェック」ができるほど単純です。Javaの定期的なタスクは、さまざまな方法で実装できます。たとえば、この他の質問を参照してください。

JUNGは、更新デモ(例:これ)で再レンダリング/再ペイントします。ドキュメントにリンクされているチュートリアル(pdf)は、セクション5の動的更新をカバーしています(このセクションは対話性に関するものですが、新しい情報が表示されたときに更新を行うために必要なものはすべてカバーされています)。

于 2012-04-26T16:35:00.763 に答える
0

JUNGは、変更をリッスンできるラッパー(ObservableGraph)を提供します。

更新の通知を受け取ったら、レイアウトを更新してからビジュアライゼーションを更新する必要があります。後者はSwingの通常の方法で行われます。

于 2012-04-26T16:01:33.473 に答える