在Java中,當被拖動的項目是源控件本身時,執行拖放操作的最佳方式是什麼?我知道一個控制只不過是數據而已,但差異確實會影響UI。Java:如何將控件拖放到新位置而不是其數據?
我正在創建一個紙牌風格的遊戲,其中我有從JLabel派生的Card類卡對象。我想通過將其拖放到一個尚未命名的目標控件上來將該卡拖動到另一個位置。在拖動過程中,我希望卡片可以通過鼠標進行視覺移動,並且在丟棄時,我希望它移動到該目標對象或返回到其之前的位置。
我已經完成了各種D-n-D測試,並沒有發現任何在Java的D-D的適當規則下工作的東西。
例如,如果我使用真正的D-n-D拖動卡片對象,我只能創建卡片的幻影圖像而不是實體圖像。此外,光標變化,我寧願它沒有(我想我可以修復它),並且源代碼管理仍然可見(儘管在拖動過程中它應該很容易使其透明)
另一方面,我可以通過偵聽MouseMotionListener.mouseDragged()事件並手動將卡片移動到新位置來美觀地拖動卡片。這很好,但它不遵循正確的D-n-D,因爲這不會通知其他控件的拖動。我想我可以創建自己的系統來通知其他控件,但這不會使用Java的真正D-n-D。另外,如果我將真正的Java d-n-d東西與在mouseDragged期間逐字移動卡片的方法混合,那麼我認爲真正的D-n-D東西將永遠不會工作,因爲鼠標在技術上絕不會直接在除被卡的卡之外的任何其他控件上。這個方向看起來像是一個粗暴的黑客。
我希望這是有道理的。我之前一直在樣品上出現問題,因爲它們看起來都很不一樣,而我花了大量時間研究的樣品看起來要比D-n-D在1.4版本中進行大修之前要早幾年。
的紙牌式的遊戲也許是更好看對於JList,Renderer默認爲retutns JLabel(或JComponent) – mKorbel 2012-03-13 22:36:40
查看下面發佈的撲克牌示例。請讓我知道它是否有意義。 – 2012-03-14 01:48:00