2012-05-28 126 views
0

我在運行我的代碼時遇到了一些問題,這些代碼在windows下工作,現在我在Mac上。這與拖放有關,它用於在Windows上工作(編寫一次,無處不在!),但現在onDragDropped事件沒有被觸發(我已經使用System.out.println()測試過)。這是代碼。任何幫助表示讚賞。有關係統預先感謝拖放問題(Mac)

HRWindowGridPane.setOnDragEntered(new EventHandler<DragEvent>() { 


     @Override 
     public void handle(DragEvent event) { 
      System.out.println("Drag entered"); 
      lblPhoto.setEffect(finalBlend); 
      event.consume(); 
     } 
    }); 

    HRWindowGridPane.setOnDragExited(new EventHandler<DragEvent>() { 

     @Override 
     public void handle(DragEvent event) { 
      lblPhoto.setEffect(null); 
      System.out.println("Drag exited"); 
      event.consume(); 
     } 
    }); 

    EventHandler<DragEvent> onDragOver = new EventHandler<DragEvent>() { 
     public void handle(DragEvent event) { 
      /* data is dragged over the target */ 
      /* accept it only if it is not dragged from the same node 
      * and if it has a string data */ 
      if (event.getGestureSource() != HRWindowGridPane && 
        event.getDragboard().hasFiles()) { 
       /* allow for both copying and moving, whatever user chooses */ 
       event.acceptTransferModes(TransferMode.ANY); 
       System.out.println("Drag over"); 
      } 

      event.consume(); 
     } 
    }; 
    HRWindowGridPane.setOnDragOver(onDragOver); 

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

     @Override 
     public void handle(DragEvent event) 
     { 
      System.out.println("Drag dropping"); 
      Dragboard db = event.getDragboard(); 
      System.out.println("Drag dropped: got dragboard from event!"); 

      if(db.hasFiles()) 
      { 
       System.out.println("Drag dropped: dragboard has files!"); 
       for(File file:db.getFiles()) 
       { 
        if(file.getName().contains(".jpg") || file.getName().contains(".jpeg") || file.getName().contains(".JPG")) 
        { 
         Image img; 
         try 
         { 
          System.out.println("Everything is fine until image processing... hmmm"); 
          img = new Image(file.toURI().toURL().toString(), 118.0, 88.0, false, true); 
          ImageView view = new ImageView(img); 
          view.setFitWidth(118.0); 
          view.setFitHeight(88.0); 
          view.resize(118.0, 88.0); 
          lblPhoto.setGraphic(view); 
          avatarImage = file; 
         } 
         catch (IOException e) 
         { 
          e.printStackTrace(); 
         } 

        } 
        else 
        { 
         AlertWindow alert = new AlertWindow("Falha", "O Arquivo não é uma imagem JPG válida"); 
         try 
         { 
          Stage stage = new Stage(); 

          alert.start(stage); 

          stage.toFront(); 
          HRWindowGridPane.toBack(); 
          stage.centerOnScreen(); 
          stage.show(); 

         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 

       } 


      } 

      event.setDropCompleted(true); 
      event.consume(); 
     } 

    }); 

    HRWindowGridPane.setOnDragDone(new EventHandler<DragEvent>() { 

     @Override 
     public void handle(DragEvent event) 
     { 
      System.out.println("Drag done"); 
     } 
    }); 

更多信息:

Brunos-MacBook-Pro:~ bruno$ java -version 
java version "1.7.0_04" 
Java(TM) SE Runtime Environment (build 1.7.0_04-b21) 
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode) 

的JavaFX 2.1版

回答

0

的問題是在JIRA現在作爲一個bug。這裏是我從另一個論壇上獲得的鏈接,希望當2.2是ga時它是固定的。

http://javafx-jira.kenai.com/browse/RT-20253

編輯

爲了保持這個答案更新。拖放問題在JavaFX-2去GA時解決。它的工作就像在Mac OS X上的魅力,jre 1.7+