Wie ziehe ich per Drag & Drop in ein JEditorPane?Java

Java-Forum
Anonymous
 Wie ziehe ich per Drag & Drop in ein JEditorPane?

Post by Anonymous »

Ich versuche, Drag & Drop in einem geteilten Bereich mit zwei Editoren einzurichten.
Wenn ich eine Datei per Drag & Drop in den linken Editor ziehe, muss sie den linken Editor versorgen.
Wenn ich eine Datei per Drag & Drop in den rechten Editor ziehe, muss sie den rechten Editor füttern.
Hier ist mein Code, der in einer typischen Umgebung einwandfrei funktioniert:

Code: Select all

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);
}
}
Im Unternehmensumfeld bewirkt es jedoch nichts. Ich erreiche nie die Methode canImport. Was könnte die Ursache sein?
Die Betriebssystemumgebung ist Windows 10 22H2.
Eine interessante Sache ist, dass das Problem verschwindet, sobald die Anwendung mit launch4j in eine ausführbare Anwendung gepackt wird.
Ich habe eine Maven pom.xml verwendet, um sie zu packen:

Code: Select all

4.0.0
demo
jeditorpane-dnd-demo
1.0.0
JEditorPane DND Demo

UTF-8
25
JEditorPaneDNDDemo


${project.artifactId}


org.apache.maven.plugins
maven-compiler-plugin
3.14.1

${project.build.sourceEncoding}
${maven.compiler.source}
${maven.compiler.target}



org.apache.maven.plugins
maven-shade-plugin
3.6.1


shade
package

shade


false


${main.class}







com.akathist.maven.plugins.launch4j
launch4j-maven-plugin
2.7.0


wrap-with-launch4j
package

launch4j


gui
${project.build.directory}/${project.build.finalName}.jar
${project.build.directory}/${project.build.finalName}.exe

${main.class}


25








Ich habe mit mvn install erstellt und dann, nachdem ich JAVA_HOME festgelegt hatte, die Anwendung ausgeführt und Drag & Drop war erfolgreich.

Code: Select all

set JAVA_HOME=C:\path\to\jdk-25.0.1
jeditorpane-dnd-demo.exe
Drag & Drop funktioniert auch nach dem Start mit:

Code: Select all

%JAVA_HOME%\bin\java -jar jeditorpane-dnd-demo.jar

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post