2017-11-22 6 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'イベントを最初に捕らえなければならないと信じています、そして、どんなドラッグタイプが許されるか定義します。次のURLを参照してください。https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#onDragDetectedProperty Edit:Err ..これは、このノードからドラッグを開始する場合です。さもなければ正しい場所はおそらく 'onDragEntered'ですが、ノードが許すドラッグの種類を指定する必要があります。 – Itai

+0

多くのOracleの例では、別のJavaFXノード内からドラッグ・プロセスを開始していると想定しています(この場合は役に立ちません)。私は 'onDragEntered'をキャプチャし、それが役立つかどうか確認します。ありがとう! –

答えて

0

同僚の画面でいくつかのテストを行ったところ、これは4KモニターのJavaFXに問題があるようです。この例(およびその他のものはオンライン)は、1080pモニターでは動作しますが、4Kモニターでは動作しません。

私は1080pでこの機能をテストしなければならないと思うし、ユーザーに4Kの画面がないことを願っています。

関連する問題