перетаскивание из одного приложения JavaFX в другое - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь переместить элемент из одного приложения JavaFX в другое с помощью перетаскивания, насколько я понимаю, это не должно быть проблемой.

Итак, у меня есть объект класса и перетащитеэто из одного приложения в другое, а затем распечатать его содержимое на консоли.В основном это выглядит неплохо, я могу опустить «принятый» или «не принятый», поиграв с режимами передачи, что показывает мне, что сам механизм работает.Но когда я помещаю объект в другое приложение, на консоль выводятся буквы, которые, как я считаю, в основном китайские.Это, очевидно, некоторая проблема с кодированием, но я не могу понять, что происходит, кроме того факта, что оба приложения в основном используют одну и ту же кодовую базу, «китайские» буквы довольно многочисленны.ToString объекта просто печатает полторы строки латинскими буквами, но после отбрасывания печатается несколько абзацев «китайских» букв.

Может кто-нибудь сказать мне, что здесь происходит?Это просто кодировка?Может ли ОС (Win7 кстати) вмешиваться здесь?Я обнаружил давно потерянную древнюю китайскую мудрость?

Сам код довольно прост, вот код от "отправителя"

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 голосов
/ 23 мая 2018

Проблема использует DataFormat.PLAIN_TEXT.Это означает, что JavaFX считает формат данных именно тем, что он говорит в tin: text, то есть String data.Это не совсем так.static член DataFormat, который относится к подходящему DataFormat, не существует, поэтому вам нужно создать его самостоятельно:

final String mimeType = "application/javafx-entrylist"; // TODO: choose properly

// use existing format or introduce new one
DataFormat f = DataFormat.lookupMimeType(mimeType);
final DataFormat format = f == null ? new DataFormat(mimeType) : f;

setOnDragDetected(event -> {
    Dragboard db = startDragAndDrop(TransferMode.ANY);

    ClipboardContent clipboardContent = new ClipboardContent();
    clipboardContent.put(format, treeElement.getEntities());

    db.setContent(clipboardContent);

    System.out.println(db.getContent(format));

    event.consume();
});

setOnDragDropped(event -> {
    Dragboard db = event.getDragboard();
    if (db.hasContent(format)) {
        System.out.println(db.getContent(format));
        System.out.println("Accept Drop");
    }

    event.consume();
});
...