2012-03-21 9 views
4

私はJTreeでドラッグアンドドロップを実装していますが、これはちょっと混乱します。この図では、ドロップ先がitem4item5の間で、ノード間の距離によってどのように変化するかを示しています。私はこれは、item4item5の行境界がそれらの中間に現れ、どちら側にいるかによって実際には異なる行にあるためです。ノード間のJTreeドロップインデックス

ユーザーの観点から見ると、これは当然ではないと思います。私はノードの上に落とした場合、ドロップがそのノードの上で発生すると思います。私がノードの下に落とした場合、ドロップはそのノードの下で発生します。この種の動作を設定する方法はありますか?

enter image description here

編集:私は確認することでこの問題を解決しているように見えた:supportTransferSupportオブジェクト

EDIT 2であることを場所

DropLocation dropLoc = support.getDropLocation(); 
    Point dropPoint = dropLoc.getDropPoint(); 
    tree.getTree().getPathForLocation(dropPoint.x, dropPoint.y); 

注意をドロップ取得する方法を表示するようにコードを追加しますドロップポイントがノードの中間点の上または下にある場合次に、ドロップがどのノードの上か下かを判断できます。

+0

ノードを削除する場所を選択するコードを表示できますか? –

+0

私はそのコードを追加しました。早いほど良いのヘルプについて –

+0

、[SSCCE](http://sscce.org/)を投稿 –

答えて

2

あなたは答えを整理しましたが、コードを整理して投稿しておく価値があると考えています。

 public void dragOver(DropTargetDragEvent dtde) 
     { 
      Point dropPoint = dtde.getLocation(); 
      TreePath path = tree.getPathForLocation(dropPoint.x, dropPoint.y); 
      Rectangle pathBounds = tree.getPathBounds(path); 
      Rectangle topHalf = new Rectangle(pathBounds.x, pathBounds.y, pathBounds.width, pathBounds.height/2); 
      if (topHalf.contains(dropPoint)) 
      { 
       System.out.println("top half"); 
      } 
      else 
      { 
       System.out.println("bottom half"); 
      } 
     }