Как перетащить в JEditorPane?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как перетащить в JEditorPane?

Сообщение Anonymous »

Я пытаюсь реализовать перетаскивание внутри разделенной панели с двумя редакторами.
Когда я перетаскиваю файл в левый редактор, он должен передать левый редактор.
Когда я перетаскиваю файл в правый редактор, он должен передать правый редактор.
Я никогда не добираюсь до метода canImport.
Вот мой код:
import java.awt.BorderLayout;
import java.awt.datatransfer.DataFlavor;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.List;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.SwingUtilities;
import javax.swing.TransferHandler;
import javax.swing.WindowConstants;

public class JEditorPaneDNDDemo extends JFrame {

public static void main(String[] args) {
SwingUtilities.invokeLater(JEditorPaneDNDDemo::new);
}

private final JEditorPane leftEditor;
private final JEditorPane rightEditor;

public JEditorPaneDNDDemo() {
super("JEditorPane DND Demo");

leftEditor = createEditor();
rightEditor = createEditor();

JScrollPane leftScroll = new JScrollPane(leftEditor);
JScrollPane rightScroll = new JScrollPane(rightEditor);

installDrop(leftEditor, Side.LEFT);
installDrop(rightEditor, Side.RIGHT);

JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftScroll, rightScroll);
split.setResizeWeight(0.5);

add(split, BorderLayout.CENTER);

setSize(900, 600);
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}

private JEditorPane createEditor() {
JEditorPane editor = new JEditorPane();
editor.setDragEnabled(true);
return editor;
}

private enum Side { LEFT, RIGHT }

private void installDrop(JEditorPane editor, Side side) {

TransferHandler handler = new TransferHandler() {

@Override
public boolean canImport(TransferSupport support) {
System.out.println(side + " canImport called");
return support.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
}

@Override
public boolean importData(TransferSupport support) {
System.out.println(side + " importData called");
try {
@SuppressWarnings("unchecked")
List files = (List) support
.getTransferable()
.getTransferData(DataFlavor.javaFileListFlavor);

if (files.isEmpty()) {
return false;
}

File file = files.get(0);
String text = new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8);

if (side == Side.LEFT) {
leftEditor.setText(text);
} else {
rightEditor.setText(text);
}
return true;

} catch (Exception e) {
e.printStackTrace();
return false;
}
}
};

editor.setTransferHandler(handler);
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... editorpane
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»