DefaultMutableTreeNode
のサブクラスを含むDefaultTreeModel
があります。 isLeaf()
をオーバーライドするだけで、ノードが展開されたときに子ノードが遅延ロードされるため、常にtrue
が返されます。その後、ノードが崩壊すると、サーバーからの更新を登録解除したため、子を削除します(適切なtreeNodesRemoved
イベントを発生させます)。子が削除された後にJTreeノードの 'expand'コントロールを表示しますか?
問題は、ユーザーがノードを折りたたんで子を削除した後、愚かな小さな拡張サークルが消えることです(しかし、その領域をクリックするとノードが拡張されます)。子どもが削除されたときに、常に拡大コントロールを表示するにはどうすればよいですか?
関連:Add 'expand' button to JTree node that has no children?。偽の子供を唯一の方法で追加していますか?
を提示しているうーん、あなたは何をやったかと、明らかに間違って何もない、私の提案は、モデル(ひいては木)通知するさまざまな方法を試してみることですノードが変更されたことを示します。たとえば、 'TreeExpansionListener.treeCollapsed'メソッドで' defaultMutableTreeNode.removeAllChildren() 'と' defaultTreeModel.reload(defaultMutableTreeNode) 'を呼び出すことができます。 –
子供の摘出の詳細な説明はできますか?なぜこれが必要ですか? 「サーバーからの更新の登録を解除したので」私には分かりません。 – MockerTim
@MockerTim、ノードが展開されると、自分のサーバーに子をフェッチし、その直接の子のイベントの挿入/削除/変更を要求するリクエストをサーバーに送信します。ノードが崩壊すると、サーバーへの要求を送信して子ノードへの更新の受信を停止します。それから私はすべての子供を取り除きます、私は失効する可能性のあるノードを守りたくないからです。 – yonran