我使用的是我自己的模型支持的Sun示例JTreeTable
的稍微修改版本。這將是第三個例子(http://java.sun.com/products/jfc/tsc/articles/bookmarks/處的書籤)。JTreeTable DnD瘋狂閃爍放置光標
除拖放支持外,一切均按預期工作。我想DnD更像是JTree
提供的。由於JTreeTable
是擴展JTable
,因此它提供JTable.DropLocation
類來確定放置位置,該位置在將東西放入JTreeTable
(無路徑和無子索引)的樹渲染列中時不提供足夠的信息。我已經通過創建基於JTable
和JTree
版本組合的自定義DropLocation
類來解決此問題。我還修改了上述JTreeTable
實現提供的TreeTableCellRenderer
類的paint方法,以向用戶顯示此新信息(她現在可以查看新節點是否放置在選定節點之前或之後如果在樹列內,就像您期望從JTree
期望的那樣)。
雖然有一個問題。當放置位置在樹列內呈現時,鼠標光標變得瘋狂。它在數毫秒後出現然後消失,或者這種情況發生得如此之快,甚至沒有顯示拖動光標。這也發生在未經修改的Sun的例子中。我完全處於黑暗中,爲什麼會發生這種情況。在http://www.java.net/node/663106找到了另一個具有相同問題的人,但是提供的解決方案似乎將組件的放置位置設置爲空,並且無法使用JTreeTable.getDropLocation()
方法檢索。我需要這個將它轉換爲我修改後的DropLocation
,然後根據它來繪製東西。 我非常接近我的使用案例的適當解決方案,我可以品嚐它。這個光標閃爍的東西是我的唯一障礙。有任何想法嗎?
使用Java 1.6。
PS:我已經決定自定義JTreeTable
而不是現有的組件(如Netbeans的輪廓或JXTreeTable
),因爲它們都出現一個從JTable.DropLocation
問題的痛苦和不提供之前或之後下探支撐選定的樹節點(只在裏面)。如果你知道一個提供這種功能的組件,我很樂意聽到它。
在這個問題上的郵政Scriptum我錯誤地指責'不能夠支持之前或選定樹節點後下降的org.netbeans.swing.Outline'和'JXTreeTable' 。這不是事實,因爲這些組件事實上支持它。它們都間接地繼承了一個JTable。雖然'JTable.DropLocation'確實不提供路徑信息,但您始終可以通過它提供的錶行和列來獲取它。如果我知道這一點,我將永遠不會打擾我自己的組件。我建議反對它。 – predi