2015-11-04 417 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(); 
     } 
    });