おそらく、「reload()」の代わりに「nodeChanged()」を使用すると、希望する効果が得られます。
DefaultTreeModelクラスには、ツリーのさまざまな部分を変更して再描画するための一連のメソッドがあります。DefaultTreeModelには、再描画のみを実行する他のメソッドもあります。
'reload(node)'について言及し、呼び出すとツリーが崩壊することをコメントしました。'reload'により、サブツリー全体がそのノードから完全に再描画されます。(ただし、そのノードが表示されていない場合は、何も変更されません。)これは「構造変更」と呼ばれます。
'insertNodeInto()'および'removeNodeFromParent()'は、ノードを追加または削除してから再描画することにより、ツリー構造を変更します。
'nodeChanged()'は、ノードで何かが変更されて表示が異なることをモデルに通知するだけなので、必要なものだと思います。おそらく、表示可能なテキストは以前とは異なっています。おそらく、ノードのユーザーオブジェクトを変更しました。これは、ノードで「nodeChanged()」を呼び出すときです。
折りたたみ中の独自のコードおよび提供されているサンプルプログラムvels4jで、「reload()」呼び出しの代わりに「nodeChanged()」を試す必要があります。これで問題が解決する可能性があります。
DefaultTreeModelには、他の場合に使用される他の2つのメソッドファミリーもあることに注意してください。
これらのメソッドはツリーノードで機能し、ツリーパスを使用して変更が行われた場所を定義します。ツリーの基礎となるデータ構造は変更されませんが、モデルに何かが変更されたことを通知するため、実際に再描画したり、変更に応答したりするリスナーに通知できます。
nodesWereInserted()
nodesWereRemovde()
nodesChanged()
nodeStructureChanged()
fire...()
DefaultTreeModelおよび作成するサブクラスの内部で使用される一連のメソッドもあります。何かが変わったことをリスナーに通知するだけです。それらが保護されていることに注意してください。