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'イベントを最初に捕らえなければならないと信じています、そして、どんなドラッグタイプが許されるか定義します。次のURLを参照してください。https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#onDragDetectedProperty Edit:Err ..これは、このノードからドラッグを開始する場合です。さもなければ正しい場所はおそらく 'onDragEntered'ですが、ノードが許すドラッグの種類を指定する必要があります。 – Itai
多くのOracleの例では、別のJavaFXノード内からドラッグ・プロセスを開始していると想定しています(この場合は役に立ちません)。私は 'onDragEntered'をキャプチャし、それが役立つかどうか確認します。ありがとう! –