java – 节点之间的JTree drop index

我已经在我的JTree中实现了拖放功能,但是我觉得这有点令人困惑.在图片中,我将展示item4和item5之间的放置位置如何根据您所在节点之间的距离而变化.我猜这是因为item4和item5的行边界在它们之间的中间相遇,并且根据你所在的那一边,你实际上在另一行.

从用户的角度来看,我认为这不自然.我认为如果我跌破一个节点,那么就会发生下降.如果我跌落到节点下方,则会在其下方发生下降.有没有办法配置这种行为?

编辑:添加代码以显示如何获取放置位置

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

请注意,支持是TransferSupport对象

编辑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");
            }
         }
点赞