从一个JavaFX应用程序拖放到另一个JavaFX应用程序

时间:2018-05-23 06:30:56

标签: drag-and-drop javafx-8

我试图通过拖放将一个元素从一个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();
    });

我真的没有看到任何可以解释我的错误的内容。

1 个答案:

答案 0 :(得分:1)

问题是使用DataFormat.PLAIN_TEXT。这意味着JavaFX认为数据格式正如它在tin:text上所说的那样,即String数据。实际情况并非如此。 static的{​​{1}}成员没有引用合适的DataFormat,因此您需要自己创建一个:

DataFormat