2016-07-03 2 views
1

Я пытаюсь изучить JavaFX путем реализации шахматной игры. Моя проблема: я понятия не имею, как перемещать кусок, перетаскивая его. В моем коде у меня есть 2D-массив ярлыков, в котором метка содержит ImageView. Я хочу знать, как определить другую часть (узел) под перетаскиваемой фигурой. Спасибо заранее.перетащить узел в другой узел

ответ

0

В основном вы должны использовать setOnDragDetected() метод для элемента, который вы хотите перетащить, а затем использовать setOnDragOver() на целевой элемент, чтобы определить, какие TransferMode принимает и setOnDragDropped() на целевой метод, когда падение done.Finally setOnDragComplete() на исходной позиции чтобы определить, что сопротивление было успешным.

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

Смежные вопросы