Java 有没有办法检测JTree上是否即将发生跌落?

Java 有没有办法检测JTree上是否即将发生跌落?,java,swing,drag-and-drop,jtree,Java,Swing,Drag And Drop,Jtree,我有一个JTree,用户可以从其他组件中删除元素。当用户将鼠标悬停在树中的节点上时(在“放置模式”期间),最靠近的节点将高亮显示。这是在TransferHandler的实现中实现的 @Override public boolean canImport(TransferSupport support) { //Highlight the most near lying node in the tree as the user drags the //mouse over nod

我有一个JTree,用户可以从其他组件中删除元素。当用户将鼠标悬停在树中的节点上时(在“放置模式”期间),最靠近的节点将高亮显示。这是在TransferHandler的实现中实现的

@Override
public boolean canImport(TransferSupport support) {

    //Highlight the most near lying node in the tree as the user drags the 
    //mouse over nodes in the tree.
    support.setShowDropLocation(true);
每次选择一个新节点时(也是在“删除模式”期间),这将触发TreeSelection事件。这反过来将调用我创建的侦听器,该侦听器将查询数据库中与该节点相关的详细信息

现在,我正在寻找一种方法,以某种方式过滤掉“删除模式”期间从节点选择生成的事件。它试图限制数据库调用。有人对我如何做到这一点有什么想法吗


所有的意见都将受到高度赞赏

有一种非常间接的方法来检测这种情况。您可以在属性
“dropLocation”
的树组件上注册
PropertyChangeListener
。每当放置位置发生变化时,就会调用该函数,因此您可以在该位置设置一个字段
dropOn
,然后可以在
TreeSelectionListener
中读取该字段

tree.addPropertyChangeListener("dropLocation", new PropertyChangeListener() {
    public void propertyChange(PropertyChangeEvent pce) {
        dropOn = pce.getNewValue() != null;
    }
});

tree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
    public void valueChanged(TreeSelectionEvent tse) {
        System.out.println(tse + " dropOn=" + dropOn);
    }
});

请注意,这确实会在第一次进入树时触发一个错误的
false
值,但随后的所有事件都显示
dropOn=true

我没有尝试过这一点,但这是否与执行tree.getDropLocation()相同?我已经试过了,但由于某种原因,它并没有真正起作用…@sbratla当然你是对的,这是一个更简单的解决方案。我想的太复杂了。。。然而,为什么
getDropLocation
在您的情况下不起作用?依我看,它能满足你的需要。嗯,我可能需要再看一次,看看我能不能让它正常工作。我真的无法指出任何事情(关于它为什么不起作用)…这很可能是一个坐下来花时间去弄清楚的问题。无论如何,谢谢你的意见。至少你确认了我在正确的轨道上,所以我会将你的答案标记为正确!