gpt4 book ai didi

JavaFX 拖放窗口没有响应

转载 作者:行者123 更新时间:2023-11-30 07:55:26 24 4
gpt4 key购买 nike

我正在尝试一个简单的 Java FX 程序,它创建一个窗口,我需要的只是添加读取已删除文件的功能。我有以下代码片段,它不会引发任何错误,但也不会让我删除任何内容。当我尝试删除文件时,它显示红色光标(不允许使用 Windows 光标)

我使用的是 Windows 8 计算机和 JDK 版本 8.0_60。不确定是什么问题。代码有问题吗?我错过了什么吗?

我尝试过的 -

  1. 尝试更改传输模式
  2. 尝试检查文件权限

抱歉,如果代码中存在愚蠢的错误,因为我是 JavaFx 新手。

这是代码 -

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.*;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class DragMe extends Application {

@Override
public void start(Stage primaryStage) {
Label label = new Label("Please Drag Your File Here.");
Label dropped = new Label("");
VBox dragTarget = new VBox();
dragTarget.getChildren().addAll(label,dropped);
dragTarget.setOnDragOver(new EventHandler<DragEvent>() {

@Override
public void handle(DragEvent event) {
if (event.getGestureSource() != dragTarget
&& event.getDragboard().hasString()) {
/* allow for both copying and moving, whatever user chooses */
event.acceptTransferModes(TransferMode.ANY);
}
event.consume();
}
});

dragTarget.setOnDragDropped(new EventHandler<DragEvent>() {

@Override
public void handle(DragEvent event) {
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
dropped.setText(db.getString());
success = true;
}
/* let the source know whether the string was successfully
* transferred and used */
event.setDropCompleted(success);

event.consume();
}


});

StackPane root = new StackPane();
root.getChildren().add(dragTarget);

Scene scene = new Scene(root, 500, 250);

primaryStage.setTitle("Testing the Drap File");
primaryStage.setScene(scene);
primaryStage.show();
}


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

更新

与 NwDx 进行了讨论,我们尝试找出不同场景下的拖放功能。

  1. 如果文件是从 Eclipse 文件树中拖动的,则允许拖放
  2. 如果文件是从任何其他位置拖动的,例如桌面版,不起作用
  3. 尝试为 eclipse 创建新的工作区,但没有成功。
  4. 尝试过在 MS Word 中进行拖放,效果很好。
  5. 尝试创建 JAR 并运行它,效果很好。

尝试以管理员身份启动 Eclipse,但没有成功。

已解决

以管理员身份运行 Eclipse 会导致此问题。正常运行就可以了!感谢 NwDx 提供的代码。( Unable to drag and drop to Eclipse )

最佳答案

现在我已经找到了可行的解决方案,希望对您也有用。我已经改变了你要求的方式setOnDragOver ,也许一个文件没有 hasString()确实如此,所以我将其更改为 event.getDragboard().hasFiles()并将传输类型更改为复制。但您可以按照自己的意愿更改它。之后,您需要从拖板中获取文件(您可能拖动了多个文件)。在我的简单示例中,我只获取第一个并显示它的绝对路径。

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.*;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class DragMe extends Application {

@Override
public void start(Stage primaryStage) {
Label label = new Label("Please Drag Your File Here.");
Label dropped = new Label("");
Label content = new Label();
VBox dragTarget = new VBox();
dragTarget.getChildren().addAll(label, dropped, content);
dragTarget.setOnDragOver(new EventHandler<DragEvent>() {

@Override
public void handle(DragEvent event) {
if (event.getGestureSource() != dragTarget && event.getDragboard().hasFiles()) {
/*
* allow for both copying and moving, whatever user chooses
*/
event.acceptTransferModes(TransferMode.COPY);
}
event.consume();
}
});

dragTarget.setOnDragDropped(new EventHandler<DragEvent>() {

@Override
public void handle(DragEvent event) {
Dragboard db = event.getDragboard();
List<File> files = (ArrayList<File>) db.getContent(DataFormat.FILES);

boolean success = false;
if (files != null) {
File file = files.get(0);
dropped.setText(file.getAbsolutePath());
success = true;
}
/*
* let the source know whether the string was successfully
* transferred and used
*/
event.setDropCompleted(success);

event.consume();
}

});

StackPane root = new StackPane();
root.getChildren().add(dragTarget);

Scene scene = new Scene(root, 500, 250);

primaryStage.setTitle("Testing the Drap File");
primaryStage.setScene(scene);
primaryStage.show();
}

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

App

关于JavaFX 拖放窗口没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32744361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com