JavaFXのは、ドラッグ&ドロップすることはできません

崑:

私は、このインタフェースを持っています:

@Override
public void start(Stage primaryStage){

    Text fileText = new Text("File:");

    TextField fileField = new TextField();
    fileField.setDisable(true);
    fileField.setMinWidth(250);
    fileField.setOnDragDropped(e -> {

        Dragboard db = e.getDragboard();
        boolean success = false;
        if (db.hasFiles()){

            fileField.setText(db.getFiles().toString());
            success = true;

        }

        e.setDropCompleted(success);
        e.consume();

    });

    Button clearButton = new Button("Clear");
    clearButton.setOnMouseClicked(e -> fileField.setText(""));

    HBox hboxFile = new HBox();
    hboxFile.setAlignment(Pos.CENTER_LEFT);
    hboxFile.getChildren().addAll(fileText, fileField, clearButton);

    HBox.setMargin(fileText, new Insets(10));
    HBox.setMargin(fileField, new Insets(10, 10, 10, 0));
    HBox.setMargin(clearButton, new Insets(10, 10, 10, 0));

    primaryStage.setScene(new Scene(hboxFile));
    primaryStage.sizeToScene();
    primaryStage.centerOnScreen();
    primaryStage.show();

}

私はのためのアクティブ化ドラッグ&ドロップしたいTextField私は、入力経由でファイルをドロップすると、ファイルの場所を表示します。

私の問題は、私はインターフェイスに何かをドロップすることはできませんです。

私は、入力経由でファイルをドラッグすると禁ずる記号を表示されます。

ここでは、画像の説明を入力します。

私は、ファイルをドラッグしようとすると、この記号は、すべてのインターフェイスを介して存在しています。

アビ:

あなたは、設定する必要がありonDragOver、ファイルの移動/コピーを有効にするプロパティを。そのようです:

fileField.setOnDragOver((e) -> {
    if (e.getGestureSource() != fileField && e.getDragboard().hasFiles()) {
        e.acceptTransferModes(TransferMode.COPY_OR_MOVE);
    }
    e.consume();
});

さらに、ラインはfileField.setDisable(true);あなたのTextFieldにファイルをドロップすることができることからあなたを無効にします。代わりに、実行します。

fileField.setEditable(false);

これは、テキストを設定するには、ドラッグ/ドロップファイルにあなたをできるようになりますが、それはテキスト手動でユーザーの編集をさせません。
完全なテストコード:

public class TestApp extends Application
{
    public static void main(String[] args)
    {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        Text fileText = new Text("File:");

        TextField fileField = new TextField();
        fileField.setMinWidth(250);
        fileField.setPromptText("Drop file here");
        fileField.setOnDragOver((e) -> {
            if (e.getGestureSource() != fileField && e.getDragboard().hasFiles()) {
                e.acceptTransferModes(TransferMode.COPY_OR_MOVE);
            }
            e.consume();
        });
        fileField.setEditable(false);
        fileField.setOnDragDropped(e -> {
            Dragboard db = e.getDragboard();
            boolean success = false;
            if (db.hasFiles()) {
                fileField.setText(db.getFiles().toString());
                success = true;
            }
            e.setDropCompleted(success);
            e.consume();
        });

        Button clearButton = new Button("Clear");
        clearButton.setOnMouseClicked(e -> fileField.setText(""));

        HBox hboxFile = new HBox();
        hboxFile.setAlignment(Pos.CENTER_LEFT);
        hboxFile.getChildren().addAll(fileText, fileField, clearButton);

        HBox.setMargin(fileText, new Insets(10));
        HBox.setMargin(fileField, new Insets(10, 10, 10, 0));
        HBox.setMargin(clearButton, new Insets(10, 10, 10, 0));

        primaryStage.setScene(new Scene(hboxFile));
        primaryStage.sizeToScene();
        primaryStage.centerOnScreen();
        primaryStage.show();
    }
}

結果:ドロップ:
テキストを手動で編集することはできません

3つのフォルダを選択し、テキストフィールドに落とし込ん

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=316541&siteId=1