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() 이벤트, 전혀 발생하지 않는 것 같습니다.
먼저 onDragDetected 이벤트를 캡처해야하며 어떤 끌기 유형이 허용되는지 정의해야한다고 생각합니다. 다음을 참조하십시오. https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#onDragDetectedProperty 편집 : 오류 ...이 노드에서 끌기를 시작하려는 경우입니다. 그렇지 않으면 올바른 위치는 아마'onDragEntered'이지만 노드가 허용하는 드래그 유형을 지정해야합니다. – Itai
많은 Oracle 예제는 다른 JavaFX 노드에서 드래그 프로세스를 시작한다고 가정합니다 (이 경우 도움이되지 않음). 'onDragEntered'를 잡아서 도움이되는지 살펴 보겠습니다. 감사! –