Advertisement
loloof64

DraggableGrid

Aug 30th, 2015
526
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 4.62 KB | None | 0 0
  1. package app;
  2.  
  3. import java.util.List;
  4. import javafx.scene.Group;
  5. import javafx.scene.Node;
  6. import javafx.scene.image.Image;
  7. import javafx.scene.image.ImageView;
  8. import javafx.scene.input.ClipboardContent;
  9. import javafx.scene.input.Dragboard;
  10. import javafx.scene.input.TransferMode;
  11. import javafx.scene.layout.GridPane;
  12.  
  13. public class DraggableGrid extends GridPane {
  14.    
  15.     public DraggableGrid(){
  16.         final int CELL_SIZE = 60;
  17.         for (int rank = 0; rank < 2; rank++){
  18.             for (int file = 0; file < 2; file++){
  19.                 Group group = new Group();
  20.                
  21.                 Image bgImage = new Image(String.format("/app/images/%s_bg.jpg",
  22.                         (file+rank) % 2 == 0 ? "green" : "dark"));
  23.                 ImageView bgImageView = new ImageView(bgImage);
  24.                 bgImageView.setFitWidth(CELL_SIZE);
  25.                 bgImageView.setFitHeight(CELL_SIZE);
  26.                
  27.                 Image fgImage = (file+rank) == 0 ?
  28.                         new Image("/app/images/car.png") : null;
  29.                 ImageView fgImageView = new ImageView(fgImage);
  30.                 fgImageView.setFitWidth(CELL_SIZE);
  31.                 fgImageView.setFitHeight(CELL_SIZE);
  32.                
  33.                 group.getChildren().addAll(bgImageView, fgImageView);
  34.                 add(group, file, rank);
  35.             }
  36.         }
  37.        
  38.         addDndFeature();
  39.     }
  40.  
  41.     private void addDndFeature() {
  42.         List<Node> children = getChildrenUnmodifiable();
  43.         for (int rank = 0; rank < 2; rank++){
  44.             for (int file = 0; file < 2; file++){
  45.                 Node currentNode = children.get(file + rank*2);
  46.                 ImageView targetImageView = (ImageView) ((Group) currentNode)
  47.                         .getChildren().get(0);
  48.                 ImageView sourceImageView = (ImageView) ((Group) currentNode)
  49.                         .getChildren().get(1);
  50.                
  51.                 sourceImageView.setOnDragDetected(event -> {
  52.                    
  53.                     if (sourceImageView.getImage() == null){
  54.                         event.consume();
  55.                     }
  56.                     else {
  57.                         Dragboard dragboard = sourceImageView
  58.                                 .startDragAndDrop(TransferMode.MOVE);
  59.  
  60.                         ClipboardContent clipboardContent = new ClipboardContent();
  61.                         clipboardContent.putImage(sourceImageView.getImage());
  62.                         dragboard.setContent(clipboardContent);
  63.                        
  64.                         /////////////////////////
  65.                         System.err.println("Drag started !");
  66.                         ///////////////////////////
  67.                        
  68.                         event.consume();
  69.                     }
  70.                 });
  71.                
  72.                 targetImageView.setOnDragOver(event -> {
  73.                    
  74.                     if (event.getGestureSource() != sourceImageView
  75.                             && event.getDragboard().hasImage()){
  76.                        event.acceptTransferModes(TransferMode.MOVE);
  77.                        /////////////////////////
  78.                         System.err.println("Drag accepted !");
  79.                         ///////////////////////////
  80.                     }
  81.                     event.consume();
  82.                 });
  83.                
  84.                 targetImageView.setOnDragDropped(event -> {
  85.                    
  86.                     Dragboard dragboard = event.getDragboard();
  87.                     boolean success = false;
  88.                    
  89.                     if (dragboard.hasImage()){
  90.                         sourceImageView.setImage(dragboard.getImage());
  91.                         success = true;
  92.                     }
  93.                    
  94.                     event.setDropCompleted(success);
  95.                    
  96.                     /////////////////////////
  97.                         System.err.println("Drag dropped !");
  98.                     ///////////////////////////
  99.                    
  100.                     event.consume();
  101.                 });
  102.                
  103.                 sourceImageView.setOnDragDone(event -> {
  104.                    
  105.                     if (event.getTransferMode() == TransferMode.MOVE){
  106.                         sourceImageView.setImage(null);
  107.                     }
  108.                    
  109.                     /////////////////////////
  110.                     System.err.println("Drag done !");
  111.                     ///////////////////////////
  112.                    
  113.                     event.consume();
  114.                 });
  115.             }
  116.         }
  117.     }
  118.    
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement