- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 getContent() 从 Dragboard 中取出我的实际对象?有没有可能指定类型? Todo 和 Doing 是 FlowPanes - MyRectangle 是自定义组件的示例。
我想要的是:放一个对象,例如。剪贴板上带有高度、填充颜色等的矩形,并从剪贴板上取回带有高度、颜色等的对象....
private static final DataFormat itemFormat = new DataFormat("custom.item");
MyRectangle myRectangle = generateRectangle();
myRectangle.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
Dragboard db = myRectangle
.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
content.put(taskFormat, myRectangle);
// Rectangle has height
System.out.println(myRectangle.getHeight());
TaskItem task = new TaskItem();
task.setTime(6);
content.put(itemFormat, task);
db.setContent(content);
event.consume();
}
});
myRectangle.setOnDragDone(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
event.consume();
}
});
doing.setOnDragOver(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
if (event.getGestureSource() != doing) {
event.acceptTransferModes(TransferMode.MOVE);
}
event.consume();
}
});
doing.setOnDragEntered(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
event.consume();
}
});
doing.setOnDragExited(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
event.consume();
}
});
doing.setOnDragDropped(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
final Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasContent(taskFormat)) {
MyRectangle rect2 = (MyRectangle) db.getContent(taskFormat);
System.out.println(rect2.getHeight());
todo.getChildren().remove(rect2);
doing.getChildren().add(rect2);
success = true;
// doing.getChildren().add(rectangle);
}
event.setDropCompleted(success);
event.consume();
}
});
private MyRectangle generateRectangle() {
final MyRectangle rect2 = new MyRectangle(0, 0, 10, 10);
rect2.setId("app");
rect2.setArcHeight(8);
rect2.setWidth(80);
rect2.setArcWidth(8);
rect2.setStrokeWidth(1);
rect2.setStroke(Color.WHITE);
rect2.setHeight(60);
return rect2;
}
最佳答案
好吧,您真的应该考虑拥有数据的表示(而不是数据的 View ),即被拖放的对象。您注册一个处理程序来检测节点(数据 View )的拖动,将数据设置到拖板中,然后在成功放置时创建另一个相同数据的 View 。为移动移除前一个节点,不要为复制移除它。
不幸的是,它不起作用。
参见 this并为此投票 bug/feature ,这将允许您直接执行此操作。
目前,只有实现了 Serializable 的 Java 对象才能放置在拖板上。由于 JavaFX 属性不实现可序列化,因此任何使用这些属性进行数据表示的类(恕我直言,是您想要用来表示要在应用程序中拖放的数据的任何类)。即使您的类是可序列化的,据我所知,该对象在将其放入拖板时被序列化并在您删除它时被反序列化,这意味着您在拖放时会得到一个新对象,而不是对同一对象:这可能不是您想要的。 (如果您通过拖放复制某些内容,然后对其进行编辑,您可能希望两个副本都尊重该编辑。)
因此,就目前而言,我认为解决方案是创建某种本地存储库并将拖动的对象存储在其中。这可能就像 ObjectProperty<?> currentlyDraggedObject
一样简单,或者更复杂的东西,比如 LocalDragboard
我在 discussion referenced earlier 的底部实现了. (这只不过是复制你在谷歌上搜索“类型安全异构容器的标准示例”时会找到的代码。)
我不得不说,我发现拖放的方式有点奇怪。 JavaFX 2 及更高版本中的几乎所有内容都是用非常现代的 Java 风格编写的,(几乎)所有内容都非常舒适地使用泛型,一些非常好的并发 API 是为较新的高级并发 API 设计的,所有事件处理都是用关注最近的语言发展,例如 lambda 表达式和流。 Bindings API 甚至似乎对整个响应式(Reactive)编程运动略微倾斜。但是拖放似乎被设计成好像我们唯一想通过拖动手势传输的数据是字符串、图像和文件。就好像 DnD API 的设计者并没有真正理解程序员想要开发他们自己的数据表示类的想法。
因此,在这个外观非常现代的 GUI 框架中,您拥有一个看起来像是 90 年代后期设计的 DnD API(如果是的话)。很奇怪。
关于javafx - 从 JavaFX DragAndDrop 剪贴板访问自定义对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22820160/
当尝试复制到剪贴板时,有什么区别 Clipboard.SetData(DataFormats.Text, ""); 和 Clipboard.SetText(""); 最佳答案 SetText 只是 S
我正在尝试将一个对象复制到 Windows 剪贴板上,然后再次关闭。我的代码是这样的: 复制到剪贴板: Clipboard.Clear(); DataObject newObject = new Da
如何在非静态线程中获取剪贴板文本?我有一个解决方案,但我正在尝试获得最干净/最短的方法。正常调用时结果为空字符串。 最佳答案 我会添加一个辅助方法,它可以在 MTA 主线程中将 Action 作为 S
我正在研究Applescript,将上次复制的内容粘贴到任何当前字段中。它将与VoiceOver一起使用,并且关键代码方式(我所知道的唯一方式)并非始终有效。 tell application
我在这里看到: http://www.pgrs.net/2008/1/11/command-line-clipboard-access Linux 和 osx 中有一种方法可以从命令行复制到剪贴板。所
我正在尝试使用已在浏览器中运行的 Clipboard API,但 PhpStorm 不知道它。 怎样才能让 PhpStorm 识别它?我已在项目设置中将 JavaScript 语言版本设置为 ECMA
Wayland 中有剪贴板 API 之类的东西吗?或者我应该在哪里以编程方式将内容粘贴到剪贴板? 我在 Wayland 上运行 Fedora 24。 如果我觉得有一个剪贴板完全没问题,那么有代码示例(
我最近看到一个针对 ClearCase 的绝妙 hack,其中版本号作为提交的一部分被添加到 Windows 剪贴板。黑客看起来像这样: @rem = ' PERL for Windows NT -
为什么 System.Windows.Clipboard(PresentationCore.dll) 对System.Windows.Thickness (PresentationFramework.
我想用来自 NUnit 测试的文本填充 Forms.Clipboard。 我遇到的第一个问题是剪贴板必须在STA模式下使用。我找到了 the solution (NUnit 2.5.x+) 在方法上设
当我想在我的应用程序中共享基本纯文本时,将其复制到剪贴板的选项不会显示在选择器列表中。我的代码有问题吗?还是我的设备设置有误? String code = getXMLCode(); Intent s
我在LibGDX开发游戏,游戏中有登录界面和注册界面。 HTML 版本的游戏有剪贴板的沙盒环境,意味着: 任何从游戏中复制的东西,都不能粘贴到游戏外&从外部复制的任何内容都不能粘贴到游戏的文本字段中
我有一个奇怪的问题,我相信我可能只需要一些权利来声明使其工作。 我有一些用户可以复制文本的 TextView ,并且可以将其粘贴到应用程序内的另一个文本字段中。但是当用户退出(或暂停)应用程序时,用户
我有一个小程序正在监听图像的剪贴板( Hook )。如果有存储或通过ctrl+c等复制的图像,我的程序会自动将图像粘贴到打开的word文档中。 代码: if (Clipboard.ContainsIm
我正在使用在 Linux Mint 上运行的终端仿真器(准确地说是 MATE),它在 Windows 托管的虚拟机中运行。我通过 ssh 连接到 CentOS Linux 上的 bash shell。
我发现自己在运行脚本并将这些运行的输出复制粘贴到电子邮件或其他一些文档中。有没有办法让复制到剪贴板的步骤成为脚本本身的一部分?我的大部分脚本都是 Perl 或 bat 文件,我在 Windows 上工
如何使用 .NET 框架访问剪贴板内容? 最佳答案 检查 Clipboard类及其 SetText\GetText 方法。 另请参阅本教程: Clipboard Copy and Paste with
我有一些代码要复制和粘贴: void WinClipboard::copy( const std::string& input ) { LPWSTR lptstrCopy;
我想获取当前存储在 Windows 剪贴板中的数据并将其保存在一个变量中,然后将数据放回剪贴板。 现在我正在使用这段代码: object l_oClipBrdData = Clipboard.GetD
引用topic这解释了如何将数据复制到 android 剪贴板,是否可以将视频/音频文件复制到剪贴板。 我假设视频/音频文件以二进制值存储并再次绑定(bind)以将它们作为视频/音频播放。 需要您的建
我是一名优秀的程序员,十分优秀!