2011-05-24 114 views
5

我有一个JTree,用户可以从其他组件中删除元素。当用户悬停在树中的节点上时(在“放置模式”期间),最靠近的躺着的节点被突出显示。这是在TransferHandler的实现中实现的。有没有办法检测JTree上是否发生丢弃?

@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); 

每一个新的节点被选中(亦在“滴模式”)的时间,这将踢TreeSelectionEvent的。这反过来会调用我创建的侦听器,它将查询数据库以获取与该节点相关的详细信息。现在

,我正在寻找一种方法以某种方式过滤掉从节点选择在“点模式”产生的事件。这是限制数据库调用的尝试。有没有人对我如何实现这一目标有任何想法?

所有的输入,将不胜感激!

回答

1

还有就是要检测这种情况下,一个非常间接的方法。你可能对物业"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

+0

我没有尝试这样做,但这样做是一样的做Tree.getDropLocation()?我已经尝试过那个,但由于某种原因它并没有真正做到这一点...... – sbrattla 2011-05-26 09:32:43

+0

@sbrattla当然你是对的,这是一个更简单的解决方案。我在想办法太复杂了......但是,为什么'getDropLocation'不适合你的情况呢?在我看来,它是做你想做的。 – Howard 2011-05-26 17:59:12

+0

那么,我可能需要再次看看它,看看我能否正常工作。不能真的把我的手指放在任何东西上(关于它为什么不起作用)......这很可能是一个坐下来的问题,并花费了实际花费的时间。无论如何,感谢您的意见。至少你确认我是在正确的轨道上,所以我会将你的答案标记为正确的! – sbrattla 2011-05-27 07:00:12

相关问题