3

カスタム TreeCellRenderers を使用して JTree から派生したクラスがあります。そのツリーにドラッグ アンド ドロップを実装したので、ユーザーはツリー ノードを再配置できます。

ドロップ モードはDropMode.ON_OR_INSERTであるため、ユーザーは他のノード上または他のノード間でノードをドロップできます。ユーザーがノードをドラッグしているときに、ポインターがノード間を指している場合、ノードが挿入される場所を示す青い線が描画されます。ポインターがノード上にある場合、ノードが追加される場所は示されません。これは、カスタム TreeCellRenderer を使用した場合にのみ発生します。DefaultTreeCellRenderer を使用すると、ドラッグ中にドロップ ノードが強調表示されます。

Web でいくつかの例を見つけました。現在 JTree で強調表示されているノードを保存し、TreeCellRenderer からクエリを実行し、強調表示されるはずのノードに対して TreeCellRenderer が呼び出された場合にノードを別の色でレンダリングします。

ドロップ ノードを強調表示するためのより洗練されたソリューションはありますか? DefaultTreeRenderer がこれを行う方法を理解できませんでした-機能をドラッグアンドドロップするためのフックがないようです。

4

1 に答える 1

9

私はそれを理解したので、誰かが気にする場合に備えて:

答えはここにあります: TreeCellRenderer の javadoc で

TreeCellRenderer は、ツリーの現在の DnD ドロップ位置を表すセルをレンダリングする役割も果たします (存在する場合)。このレンダラーが DnD ドロップ位置のレンダリングに関心がある場合は、ツリーに直接クエリを実行して、指定された行がドロップ位置を表しているかどうかを確認する必要があります。

 JTree.DropLocation dropLocation = tree.getDropLocation();
 if (dropLocation != null
         && dropLocation.getChildIndex() == -1
         && tree.getRowForPath(dropLocation.getPath()) == row) {

     // this row represents the current drop location
     // so render it specially, perhaps with a different color
 }

上記のコードを getTreeCellRendererComponent() メソッドに追加する必要があります。

于 2009-08-21T10:51:20.133 に答える