【发布时间】:2015-12-21 01:17:29
【问题描述】:
我正在尝试一个简单的 Java FX 程序来创建一个窗口,我所需要的只是添加读取已删除文件的功能。我有以下代码 sn-p 不会引发任何错误,但也不会让我丢弃任何东西。当我尝试删除文件时,它显示一个红色光标(不允许 Windows 光标)
我使用的是 Windows 8 机器和 JDK 版本 8.0_60。不确定是什么问题。代码有问题吗?我错过了什么吗?
我尝试过的 -
- 尝试更改传输模式
- 尝试检查文件权限
对不起,如果我是 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 进行了讨论,我们试图找出不同场景下的拖放。
- 如果文件是从 Eclipse 文件树中拖出的,则允许拖放
- 如果文件是从任何其他位置拖动的,例如桌面,它不起作用
- 尝试为 Eclipse 创建新的工作区,但没有成功。
- 尝试在 MS Word 中拖放,效果很好。
- 尝试创建一个 JAR 并运行它,它工作正常。
尝试以管理员身份启动 Eclipse,但没有成功。
已解决
以管理员身份运行 Eclipse 会导致此问题。正常运行即可!感谢 NwDx 提供您的代码。 (Unable to drag and drop to Eclipse)
【问题讨论】:
-
如果要删除文件,您肯定希望
dragOver处理程序中的event.getDragboard().hasFiles()和dragDropped处理程序中的db.getFiles()? -
我想,但即使复制和粘贴文本也不起作用。我当然可以试试你的建议。
-
我尝试了您当前编写的示例,并且选择并拖动一些纯文本(来自 Eclipse)工作正常(在 Mac OSX 10.9.5 / JDK 1.8.0u60 上)。
-
是的。它应该可以正常工作。我没有让它在我的机器上工作。不知道这里出了什么问题。
-
在您的问题中发布您的平台(带有版本和 JDK 版本的操作系统),看看是否有人可以检查相同的设置。