2009-08-07 6 views
3

私はカスタムTreeCellRenderersでJTreeから派生したクラスを持っています。私はそのツリーにドラッグアンドドロップを実装しているので、ユーザーはツリーノードを再配置できます。カスタムTreeCellRenderer(Java、Swing)を使用したJTreeへのフィードバックのドラッグ&ドロップ

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

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

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

答えて

7

が、私はそれを考え出したので、念のために誰もが気に:

答えている右ここ:in javadoc for TreeCellRenderer

のTreeCellRendererもそれならば、ツリーの現在のドラッグ&ドロップドロップ位置を表すセルをレンダリングするための責任があります1つ持っている。このレンダラは、ドラッグ&ドロップのドロップ位置をレンダリングする気になら、それは指定された行がドロップ位置を表すかどうかを確認するために直接ツリーを照会する必要があります。

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()メソッドに追加されなければなりません。

関連する問題