copy & paste

thomy800

Erfahrenes Mitglied
Hi.

Ich möchte gerne den Zwischenspeicher auslesen. Dafür verwende ich folgende Funktion:
Java:
	public static String read() throws UnsupportedFlavorException, IOException{
		Clipboard systemClipboard;
	    systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
	    Transferable transferData = systemClipboard.getContents( null ); 
	    for(DataFlavor dataFlavor : transferData.getTransferDataFlavors()){
	    	Object content = transferData.getTransferData( dataFlavor ); 
	    	if ( content instanceof String ) 
	    	{ 
	    		return (String)content;
	    	}
	    }
		return null;
	}
	public static void write(String s){
		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
                new StringSelection(s), null);

	}
An sich funktioniert das ganz gut, nur leider liefert das Auslesen unterschiedliche Resultate. Wenn ich aus einem Programm einen String kopiere und im Editor einfüge, kommt das raus, was man erwartet. Wenn ich allerdings mein Programm den Speicher auslesen lasse, kommt das raus:
<Text-field><Equation style= "2D Output">LUklbXJvd0c2Iy9JK21vZHVsZW5h...[usw]...HNGZ3NGaXNGOi1GXW82JFEiNUYnRj4=</Equation></Text-field>

Kopiere ich vom Editor kommt das richtige raus.

Woran liegt es, dass der Editor es schafft, diesen Kauderwelsch sinnvoll zu kopieren und mein Programm nicht?

Grüße
Thomy
 
Hallo,

beim Kopieren von Texten werden nicht nur die die sichtbaren Zeichen Kopiert, so sind im Clipboart auch Daten über den Font der Textgröße enthalten. Erschwerend kommt hinzu das es Verschiedene Zeichen Kodierungen existieren und du sie Erkennen und verarbeiten musst.

Im Klar text wenn dein String nicht der ist der er sein soll arbeitet dein Programm mit einem anderen Zeichen Satz, die Meisten Anwendungen berücksichtigen das beim Kopieren und Konvertieren intern den Text.

In Java gibt es bereits Funktionen für das Clipboart. Copyto und Copyfrom (wenn ich mich nicht teusche) diese machen das bereits für dich warum verwendest du die nicht?
 
Ich hatte schon nach solchen Funktionen gesucht, aber keine gefunden. Hier konnte ich auch keine finden...

Edit: hab hier jetzt doch was gefunden, was funktioniert :)
 
Zuletzt bearbeitet:
Wer suched der findet :)

Habe ich auch mal gemacht (in meinen Alten Anwendungen)

javax.swing.text.DefaultEditorKit.X

X = PasteAction

oder

X = CopyAction

Ein Menüeintrag der wie zum beispiel
Java:
JMenuItem menuItem = new JMenuItem(javax.swing.text.DefaultEditorKit.PasteAction)

kann damit bereits Text in Textfelder einfügen.

Swing Komponenten wie Textfelder Unterstützen Copy Paste immer mit der Standart Tastenkombination, mit anderen Worten eine Simple JtextArea anzeige kann Copy Paste bereits ohne das man was in die richtung implementieren muss.


aber gut zu wissen das es auch andere wege gibt ;)
 
Zurück