2015-11-04 422 views
0

我正在嘗試實現棋盤遊戲Qwirkle,並且我正在製作GUI。我正在使用JavaFX api來執行此操作。這是它看起來像現在:在JavaFX中拖放setOnDragDropped操作問題

Qwirkle GUI

enter image description here

我使用一個邊界佈局,其中的核心是我的板和左側,底部和右側的空間用於按鈕和這樣的。我通過在左上方生成ImageView節點並將它們轉換爲正確的位置來繪製板。

我試圖實現拖放功能,我拖動底部的瓷磚,並將它們放在板上的某個位置。到目前爲止,我已經設法從DragEntered和DragExited獲得一個終端響應,但不是DragDropped,我很茫然。這是我的代碼爲拖動事​​件:

public Tile() { 
    currentTile.setOnDragDetected(new EventHandler<MouseEvent>() { 
     public void handle(MouseEvent event) { 
      Dragboard db = currentTile.startDragAndDrop(TransferMode.ANY); 
      ClipboardContent content = new ClipboardContent(); 
      content.putString("THIS HAS BEEN DROPPED"); 
      db.setContent(content); 
      event.consume(); 
     } 
    }); 
} 

public BackBoardTile() { 
    currentTile.setOnDragDropped(new EventHandler<DragEvent>() { 
     public void handle(DragEvent event) { 
      Dragboard db = event.getDragboard(); 
      boolean success = false; 
      if (db.hasString()) { 
       System.out.println(db.getString()); 
       success = true; 
      } 
      event.setDropCompleted(success); 
      event.consume(); 
     } 
    }); 
} 

任何幫助將不勝感激!

使用的MacBook Pro與OS X 10.11.2測試

+0

你接受的OnDragOver拖動轉移?請參閱完整示例http://stackoverflow.com/a/30457148 –

+0

非常感謝!它現在完美運行! – DavidJNatarajan

回答

0

接受DragOver事件目標的阻力轉移 「平鋪」 節點:

currentTile.setOnDragOver(new EventHandler<DragEvent>() { 
     public void handle(DragEvent event) { 
      Dragboard db = event.getDragboard(); 
      if (db.hasString()) { 
       event.acceptTransferModes(TransferMode.COPY_OR_MOVE); 
      } 
      event.consume(); 
     } 
    });