2016-07-03 20 views
1

私はチェスゲームを実装してJavaFXを学習しようとしています。 私の問題は、ドラッグ&ドロップでピースを移動する方法がわかりません。 私のコードでは、ラベルにImageViewが含まれているラベルの2D配列があります。 ドラッグした部分の下にある別の部分(ノード)を特定する方法を知りたい。 ありがとうございます。ノードを別のノードにドラッグアンドドロップする

答えて

0

基本的にドロップは、元のアイテムにdone.Finally setOnDragComplete()あるときにターゲットメソッドに受け入れ、setOnDragDropped()されTransferModeかを決定するために、ターゲット項目にsetOnDragOver()を使用し、その後、ドラッグしたい項目にsetOnDragDetected()方法を使用する必要がありますドラッグが成功したと判断します。

1)オラクルhere

2)素敵な一例here

3)を理解するのは容易である第二の例から、詳細はリンク:

/** 
* Demonstrates a drag-and-drop feature. 
*/ 
public class HelloDragAndDrop extends Application { 

    @Override 
    public void start(Stage stage) { 
     stage.setTitle("Hello Drag And Drop"); 

     Group root = new Group(); 
     Scene scene = new Scene(root, 400, 200); 
     scene.setFill(Color.LIGHTGREEN); 

     final Text source = new Text(50, 100, "DRAG ME"); 
     source.setScaleX(2.0); 
     source.setScaleY(2.0); 

     final Text target = new Text(250, 100, "DROP HERE"); 
     target.setScaleX(2.0); 
     target.setScaleY(2.0); 

     source.setOnDragDetected(event -> { 
      /* drag was detected, start drag-and-drop gesture */ 
      System.out.println("onDragDetected"); 

      /* allow any transfer mode */ 
      Dragboard db = source.startDragAndDrop(TransferMode.ANY); 

      /* put a string on dragboard */ 
      ClipboardContent content = new ClipboardContent(); 
      content.putString(source.getText()); 
      db.setContent(content); 

      event.consume(); 
     }); 

     target.setOnDragOver(event -> { 
      /* data is dragged over the target */ 
      System.out.println("onDragOver"); 

      /* 
      * accept it only if it is not dragged from the same node and if it 
      * has a string data 
      */ 
      if (event.getGestureSource() != target && event.getDragboard().hasString()) { 
       /* allow for both copying and moving, whatever user chooses */ 
       event.acceptTransferModes(TransferMode.COPY_OR_MOVE); 
      } 

      event.consume(); 
     }); 

     target.setOnDragEntered(event -> { 
      /* the drag-and-drop gesture entered the target */ 
      System.out.println("onDragEntered"); 
      /* show to the user that it is an actual gesture target */ 
      if (event.getGestureSource() != target && event.getDragboard().hasString()) { 
       target.setFill(Color.GREEN); 
      } 

      event.consume(); 
     }); 

     target.setOnDragExited(event -> { 
      /* mouse moved away, remove the graphical cues */ 
      target.setFill(Color.BLACK); 

      event.consume(); 
     }); 

     target.setOnDragDropped(event -> { 
      /* data dropped */ 
      System.out.println("onDragDropped"); 
      /* if there is a string data on dragboard, read it and use it */ 
      Dragboard db = event.getDragboard(); 
      boolean success = false; 
      if (db.hasString()) { 
       target.setText(db.getString()); 
       success = true; 
      } 
      /* 
      * let the source know whether the string was successfully 
      * transferred and used 
      */ 
      event.setDropCompleted(success); 

      event.consume(); 
     }); 

     source.setOnDragDone(event -> { 
      /* the drag-and-drop gesture ended */ 
      System.out.println("onDragDone"); 
      /* if the data was successfully moved, clear it */ 
      if (event.getTransferMode() == TransferMode.MOVE) { 
       source.setText(""); 
      } 

      event.consume(); 
     }); 

     root.getChildren().add(source); 
     root.getChildren().add(target); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     Application.launch(args); 
    } 
} 
+0

をそれはとてもあなたをworked.Thank多くの場合 –

+0

@ M.Sianaki答えがあなたのために働くときはそれを解決策としてマークします:) – GOXR3PLUS

関連する問題