-1

非常に大きな JTree があり、ルートからリーフまですべてのノードをナビゲートしたいと考えています。

ユーザー入力に基づいて、何らかの再グループ化を行う必要があります。

たとえば、ユーザー オブジェクト文字列が「a」で始まるすべてのノードを、ツリー内の新しいノード内で再グループ化する必要があります。

イニシャル : ルート - アン、ジョン、アンドリュー

後 : ルート - A - アン アンドリュー J - ジョン

反復を開始し、ノードごとに一連のスレッドを開始し、新しいノードを作成するときに同期することを考えていました。

何かご意見は?

4

2 に答える 2

3

スレッドの束TreeModel...複数の を使用してバックグラウンドで新しいスレッドを構築し、EDT で全体を一度に置き換えるつもりでない限り、これThreadは非常に悪い考えです。TreeModelJTree

Swing コンポーネントは EDT でのみ変更する必要があります。そのため、複数Threadのからノードを並べ替えて、TreeModelに配置されてJTreeいる場合、 の表現が破損する可能性が高くなりますJTree

于 2012-05-15T07:20:19.873 に答える
0

ロビンが言ったように、複数のスレッドで JTree で直接実行すると、競合状態が発生します。

TreeModel をコピーして変更できます。ただし、スレッド間で同期する必要があることに注意してください。その後、単純に SwingUtilities.invokeLater を呼び出して、コピーして変更したモデルを JTree の新しいモデルとして設定できます。

もう 1 つのアイデアは、データをマルチスレッドで分析し、結果を使用して (スレッドセーフな) コレクションを作成し、結果を使用して EDT でモデルを変更することです。ツリーが大きく、変更が少ない場合、これが最速の方法です (ツリーのコピーや完全な再構築は必要ありません)。

ヒント: Java 7 を使用している場合は、Fork/Join-Framework を参照してください。そうでない場合でも、アイデアを得るためにそれを実行してください。実装は十分に簡単でなければなりません。

于 2012-05-15T07:49:13.833 に答える