2012-03-07 6 views
1

Je travaille avec javafx 2.0 et netbean 7.1, je suis confronté à un problème lors d'un glisser-déposer sur une image sur un ImageView, .i gardé l'image comme une source (une image) et 2 point cible (2 case comme point cible) .lorsque vous essayez de faire glisser une image pour la première fois, son fonctionnement est correct et après que l'image des sources est entrée dans la case target.and essayer de faire glisser l'image, erreur suivante est tracée "java.lang .IllegalArgumentException: Taille de tampon octet 18x15 [1080]! = 0 "Événement de glisser-déposer dans Javafx 2.0

Une fois l'image déplacée vers l'objet de destination, j'ai besoin de paramétrer l'écouteur pour la changer en source, je sens que son erreur de jet dans cet endroit ..

code d'utilisation

public class DragandDropEx extends Application { 

    /** 
    * @param args the command line arguments 
    */ 
    GridPane Board; 
    ImageView deactivateImageView = new ImageView(); 
    ImageView newImageView = new ImageView(); 




    final Rectangle target = new Rectangle(0, 0, 50, 50); 
    final Rectangle target2 = new Rectangle(0, 0, 50, 50); 


    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     target.setFill(Color.CHOCOLATE); 
     target2.setFill(Color.BLUE); 
     Image image = new Image(getClass().getResourceAsStream("triangle.png")); 
     getDeactivateImageView().setImage(image); 
     Board = new GridPane(); 
     primaryStage.setTitle("Drag and Drop"); 



     createSource(getDeactivateImageView()); 



     target.setOnDragOver(new EventHandler<DragEvent>() { 

      @Override 
      public void handle(DragEvent events) { 
       events.acceptTransferModes(TransferMode.MOVE); 
       events.consume(); 

        createTargetDrop(target,0,8); 
      } 
     }); 
     target2.setOnDragOver(new EventHandler<DragEvent>() { 

      @Override 
      public void handle(DragEvent events) { 
       events.acceptTransferModes(TransferMode.MOVE); 
       events.consume(); 
       createTargetDrop(target2,0,9); 
      } 
     }); 






     Board.add(getDeactivateImageView(), 0, 1); 
     Board.add(target, 0, 8); 
     Board.add(target2, 0, 9); 

     StackPane root = new StackPane(); 
     root.getChildren().add(Board); 
     primaryStage.setScene(new Scene(root, 300, 250)); 
     primaryStage.show(); 
    } 

    private void createSource(final ImageView imageView) { 
     imageView.setOnDragDetected(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent events) { 
       Dragboard storeImage =imageView.startDragAndDrop(TransferMode.MOVE); 
       ClipboardContent content = new ClipboardContent(); 
       content.putImage(imageView.getImage()); 
       storeImage.setContent(content);      **// here i am getting error** 
       events.consume(); 


      } 
     }); 
    } 

    private void createTargetDrop(final Rectangle target,final int xCordination,final int yCordination) { 

     target.setOnDragDropped(new EventHandler<DragEvent>() { 

      @Override 
      public void handle(DragEvent event) { 
       Dragboard db = event.getDragboard(); 
       Image dragedImage = db.getImage(); 
       getNewImageView().setImage(dragedImage); 
       getDeactivateImageView().setVisible(false); 
       setDeactivateImageView(getNewImageView()); 
       Board.add(getDeactivateImageView(),xCordination,yCordination); 
       event.consume(); 
       createSource(getDeactivateImageView());           // setting listener to new image 

      } 
     }); 

    } 
} 

Répondre

0

Je suppose que ses références sur. Je veux dire que vous utilisez la même référence à différents endroits. Peut-être que vous devriez utiliser un clone d'objet. Je n'ai pas cherché à coder profondément, mais on dirait que vous essayez d'ajouter le même objet à un endroit différent.

0

Je recommanderais JavaFX car il comprend Scenebuilder (une interface graphique) pour créer votre interface graphique. Vous pouvez faire glisser et déposer des éléments GUI et les dimensionner sur un canevas. Ensuite, cela crée un fichier FXML qui se connecte à un fichier de contrôle Java.

Découvrez scenebuilder ici: http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-info-2157684.html

Il y a un peu d'une courbe d'apprentissage sur la connexion du FXML au code Java, mais il vaut la peine si vous souhaitez concevoir graphiquement votre interface graphique.

Questions connexes