2011-03-17 37 views
4

我們對我正在努力獲得關於拖放行爲的更多反饋的產品提出請求。具體而言,他們希望我們在拖動操作期間鼠標懸停在某些區域上時突出顯示某些區域(以顯示放置發生的位置)。但是,我們使用TransferHandler來處理DnD和剪切/複製/粘貼,並且根據我們測試的結果,似乎Swing不會讓我們爲組件添加另一個DropTarget(回想起來,出於某些顯而易見的原因!)我們試圖走幾條路,其中沒有一條出生。如何在Java中拖放時獲取鼠標信息?

基本上,我們希望在dragEnter和dragExit事件的中間,同時仍然使用TransferHandler功能來簡化剪切/複製/粘貼和刪除行爲。有沒有人有任何例子來做這種事情?或者,在Swing當前的DnD設置中,這真的很難做到嗎?

回答

2

大部分開箱即用的Swing組件都支持這種內置的(JTree,JList等)。對於這些組件,您可以設置放置模式,並且UI將處理繪製適當的視覺效果。

myJList.setDropMode(DropMode.ON_OR_INSERT); 

對於需要處理通過覆蓋paintComponent繪製自定義效果,然後添加一個PropertyChangeListener用於觸發必要時適當的重新繪製「dropLocation」屬性繪製自己的自定義組件。這會在拖動時被頻繁地調用,所以當拖放位置的改變實際上導致行爲改變時,您可能希望只觸發重繪。

Swing Tutorial on Drop Location Rendering

+0

這似乎是可獲得的最佳信息 - 不幸的是,它看起來像兩個的JComponent和JPanel的,它不支持他們聲稱支持的行爲。 *嘆*感謝您的快速回答。 – aperkins 2011-03-18 15:52:42