2011-05-24 81 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

相關問題