2017-11-22 2 views
0

사용자가 응용 프로그램 외부에서 파일 (예 : Windows 탐색기)을 JavaFX 프로그램으로 끌 수있는 기능을 만들려고합니다. 내 드래그 이벤트가 발생하는 것처럼 보이지는 않지만 어떤 생각이든 할 수 있습니까?JavaFX 끌기 이벤트가 실행되지 않음

예제 코드 ...

public class DragTest extends Application { 

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

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     primaryStage.setTitle("DragTest"); 
     Group root = new Group(); 
     Scene scene = new Scene(root, 400, 400); 

     Label label = new Label("Drag files here!"); 
     label.setStyle("-fx-background-color: skyblue;"); 

     label.setPrefWidth(300); 
     label.setPrefHeight(100); 

     // On drag enter 
     label.setOnDragEntered((DragEvent event) -> { 
      System.out.println("DRAG ENTERED"); 
      if (event.getGestureSource() != label) { 
       event.acceptTransferModes(TransferMode.ANY); 
      } 
      event.consume(); 
     }); 


     // On drag detected 
     label.setOnDragOver((DragEvent event) -> { 
      System.out.println("DRAG OVER"); 
      if (event.getGestureSource() != label && event.getDragboard().hasFiles()) { 
       event.acceptTransferModes(TransferMode.ANY); 
      } 
      event.consume(); 
     }); 

     // On drag drop 
     label.setOnDragDropped((DragEvent event) -> { 
      System.out.println("DRAG DROP"); 
      Dragboard db = event.getDragboard(); 
      if (db.hasFiles()) { 
       label.setText(db.getFiles().size() + " files detected!"); 
      } else { 
       label.setText("No dragged files detected"); 
      } 
      event.setDropCompleted(true); 
      event.consume(); 
     }); 

     root.getChildren().add(label); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

} 

편집 : 촬영 onDragEntered() 이벤트, 전혀 발생하지 않는 것 같습니다.

+0

먼저 onDragDetected 이벤트를 캡처해야하며 어떤 끌기 유형이 허용되는지 정의해야한다고 생각합니다. 다음을 참조하십시오. https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#onDragDetectedProperty 편집 : 오류 ...이 노드에서 끌기를 시작하려는 경우입니다. 그렇지 않으면 올바른 위치는 아마'onDragEntered'이지만 노드가 허용하는 드래그 유형을 지정해야합니다. – Itai

+0

많은 Oracle 예제는 다른 JavaFX 노드에서 드래그 프로세스를 시작한다고 가정합니다 (이 경우 도움이되지 않음). 'onDragEntered'를 잡아서 도움이되는지 살펴 보겠습니다. 감사! –

답변

0

동료 화면에서 일부 테스트를 마친 후에는 JavaFX 4K 모니터의 문제 일 수 있습니다. 이 예 (및 온라인에서 발견 된 다른 것들)는 1080p 모니터에서 의도 한대로 작동하지만 4K 모니터에서는 작동하지 않습니다.

필자는 1080p에서이 기능을 테스트해야하고 내 사용자가 4K 화면을 가지지 않기를 바랍니다.