我试图通过拖放将一个元素从一个JavaFX应用程序移动到另一个JavaFX应用程序,据我所知,这不应该是一个问题。
所以我有一个类的对象并将它从一个应用程序拖到另一个应用程序,然后将其内容打印到控制台。它看起来很好看,我可以通过玩转移模式来获得“接受”或“不被接受”,这表明机制本身似乎正在起作用。 但是,当我将对象放在另一个应用程序上时,我认为大部分是中文的字母被打印到控制台。这显然是一些编码问题,但我无法弄清楚发生了什么,除了这两个应用程序主要使用相同代码库的事实,“中文”字母相当多。对象的toString只用拉丁字符打印一行半行,但在删除时会打印几段“中文”字母。
谁能告诉我这里发生了什么?它只是一个简单的编码f-up?操作系统(Win7顺便说一句)可能会干扰吗?我是否发现了久违的中国古代智慧?
代码本身很简单,这里是来自“sender”的代码
setOnDragDetected(event ->
{
Dragboard db = startDragAndDrop(TransferMode.ANY);
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.put(DataFormat.PLAIN_TEXT, treeElement.getEntities());
db.setContent(clipboardContent);
System.out.println(db.getContent(DataFormat.PLAIN_TEXT));
event.consume();
});
这里来自“接收者”
setOnDragDropped(event ->
{
Dragboard db = event.getDragboard();
if (db.hasContent(DataFormat.PLAIN_TEXT))
{
System.out.println(db.getContent(DataFormat.PLAIN_TEXT));
System.out.println("Accept Drop");
}
event.consume();
});
我真的没有看到任何可以解释我的错误的内容。
答案 0 :(得分:1)
问题是使用DataFormat.PLAIN_TEXT
。这意味着JavaFX认为数据格式正如它在tin:text上所说的那样,即String
数据。实际情况并非如此。 static
的{{1}}成员没有引用合适的DataFormat
,因此您需要自己创建一个:
DataFormat