2012-05-28 2 views
0

У меня возникают проблемы при запуске моего кода, который работает под окнами, теперь, когда я нахожусь на mac. Это связано с перетаскиванием, оно использовалось для работы над окнами (пишите один раз, отлаживайте везде!), Но теперь событие 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 теперь как ошибка. Вот ссылка, которую я получил с другого форума, надеюсь, что она исправлена, когда 2.2 - ga.

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

EDIT

Чтобы сохранить этот ответ обновляется. Проблема перетаскивания была устранена, когда JavaFX-2 отправился в GA. Это работает как шарм на MacOS X с jre 1.7+

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