1

私がここで見たのと同じようなトピックがたくさんありますが、私の小さな問題の解決策を実際に見つけることができませんでした.

私のアプリケーションはファイルを検索し、結果を jtree 内に表示しています。私はそれに問題があります。insertNodeInto(...); を使用してツリーに新しいノードを追加すると、検索中に見つかったアイテムを検索できますが、視覚化に問題があります。つまり、ノードのレンダリングに問題があるということです。それを適切に説明できないので、この画像を含めます。

ここに画像の説明を入力

検索の最後にjtreeでリロードを使用すると、すべてが正常に戻ります-レンダリングは問題ありませんが、残念ながら、ユーザーが開いたすべてのタブが閉じます。

私は学生です。英語が下手で申し訳ありません。この問題が発生する理由を誰かが知っていることを願っています。

4

1 に答える 1

2

GUIの表示方法は、ペイントスレッド(イベントディスパッチスレッド(EDT))の外部でモデルにコンポーネントを追加しているように見えます。これにより、このスレッドの外側でペイントがトリガーされ、ペイントが不安定になります。

Swingのスレッドに関するこのチュートリアルをご覧ください

を見るとDefaultTreeModel、このメソッドがGUIの更新をトリガーすることは明らかですinsertNodeInto(..)。したがって、EDTで実行しないと、例に示されているペイントの問題が発生しやすくなります。

簡単な修正は、以下の(コンパイルされていない)コードのようなメソッドを追加することです。

public void safeInsertNodeInto(final MutableTreeNode newChild,
                           final MutableTreeNode parent, final int index) {
          SwingUtilities.invokeLater(
                  new Runnable(){
                       public void run(){
                            model.insertNodeInto(newChild,parent,index);
                       }
                   }
           );
 } 

次に、モデルを直接呼び出すのではなく、そのメソッドを呼び出します。

そうは言っても、上記のチュートリアルを読むことを強くお勧めします。EDTの制約に対処するためのより高度な方法があります。

于 2012-07-29T05:44:23.093 に答える