# Text aus Zwischenablage einfügen



## Gaysson (12. Mai 2004)

Hallo!
Wie ich bereits in einem anderen Thread geschrieben, bau ich mein erstes Java-Programm, einen text-editor.
Möchte nun das Bearbeiten --> Einfügen, Kopieren Ausschneiden - Menü einfügen. D.h., z.B. bei Einfügen soll Text aus der Zwischenablage (z.B. den ich von einer Internetseite kopiert habe) eingefügt werden. Leider wird nur java.io.InputStreamReader@61a907 eingefügt, und nicht der Originaltext...


```
if (cmd.equals("Einfügen")) {
    			try
    			{
      			Toolkit tk = Toolkit.getDefaultToolkit();
				Clipboard systemClipboard = tk.getSystemClipboard();
				Transferable transferData = systemClipboard.getContents(null);
				DataFlavor[] dataFlavor = transferData.getTransferDataFlavors();
				DataFlavor flavor = dataFlavor[1];
				Object content = transferData.getTransferData(flavor);
				String contentstring = content.toString();
				textfeld.setText(contentstring);
				}
				catch ( UnsupportedFlavorException e ) {}
				catch ( IOException e ) {}
			}
```


----------



## Roar (12. Mai 2004)

Dieses Forum hat eine Suchfunktion!!! 
http://www.java-forum.org/de/viewtopic.php?t=2917&highlight=zwischenablage
http://www.java-forum.org/de/viewtopic.php?t=3045&highlight=zwischenablage
http://www.java-forum.org/de/viewtopic.php?t=4261&highlight=zwischenablage
http://www.java-forum.org/de/viewtopic.php?t=4585&highlight=zwischenablage


----------



## Guest (12. Mai 2004)

Könnt ihr nicht ma ein Auge zudrücken, ich find den Fehler wirklich nich.
Hab mir auch mal di vorgeschlagegen Varianten angeschaut, Kompiler sagt, dass er einerseits nicht clip findet und andererseits nicht zurückgeben kann aus einer Methode, die void ist (cont.getTransferData(DataFlavor.stringFlavor)...


----------



## Roar (12. Mai 2004)

Anonymous hat gesagt.:
			
		

> Kompiler sagt, dass er einerseits nicht clip findet und andererseits nicht zurückgeben kann aus einer Methode, die void ist (cont.getTransferData(DataFlavor.stringFlavor)...



1. was fürn clip? in deinem code find ich kein clip
und 2. da musst du dich vertan haben. das stimmt soweit. gib mal die fehlermeldung vom compiler und den aktuellen code.


----------



## Guest (12. Mai 2004)

Ich meinte, dass die fehlermeldungen bei dem Code von den Links, die du mir gegeben hast, kommen.
Der Code den ich gepostst habe, da sagt der Compiler gar nichts.
Habe mal mein Problem ein bissl genauer untersucht:
Wenn ich von einem Text vom Windows-Editor per Strg+C einen Text in die Zwischenablage kopiere, und dann in meinem Editor per Menüeintrag Bearbeiten--> Kopieren den Text einfügen will, klappt das.
Wenn du einige andere Texte nimmst, wie z.B. "german area (since June 2003)" (oben rechts auf dieser Homepage), kommen Meldungen wie "java.io.InputStreamReader@b32ed4".
Probiers mal bitte aus....
Hab dir mal den gesamten Code gepostest, die uninteressanten Sachen sind rausgenommen...


```
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.filechooser.FileFilter; // für Dateiauswahldialog
import java.awt.datatransfer.*; // für Copy&Paste und Drap&Drop

public class Editor extends JFrame implements ActionListener {

	JTextArea textfeld = new JTextArea(20, 60);

	public String dateiname;
	public File filedirectory;
	public String filename;

    public Editor() {
        super("Editor - Unbenannt");
        setLocation(100,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //-----------------Look-And-Feel-Stil-----------------
           try {
            UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName());
                } catch(Exception e) {};

        //-----------------Menü-----------------
        JMenuBar bar = new JMenuBar();

        //Menüeintrag Bearbeiten
        JMenuItem j21 = new JMenuItem("Kopieren");
        JMenuItem j22 = new JMenuItem("Einfügen");
        JMenu m3 = new JMenu("Bearbeiten");
        m3.add(j21);
        m3.add(j22);
        j21.addActionListener(this);
        j22.addActionListener(this);
        bar.add(m3);


        //-----------------Textfeld-----------------
        JPanel pane = new JPanel(new BorderLayout());
        textfeld.setLineWrap(true);
        textfeld.setWrapStyleWord(true);
        JScrollPane scrollpane = new JScrollPane(textfeld, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        pane.add(scrollpane, BorderLayout.CENTER);

        setJMenuBar(bar);
        setContentPane(pane);
        pack();
        setVisible(true);
    }

    public static void main (String[] arguments) {
        Editor ed= new Editor();
    }

    public void actionPerformed(ActionEvent evt){

        if (evt.getSource() instanceof JMenuItem) {
			//Dateiauswahldialog-Konstruktor mit Dateifilter
			JFileChooser auswahl = new JFileChooser();
    		auswahl.setFileFilter( new FileFilter() {
          		public boolean accept( File f ) {
            	return f.isDirectory() || f.getName().toLowerCase().endsWith(".txt");
          		}
          		public String getDescription() {
            	return "Texte (*.txt)";
          		}
        		} );
            String cmd = evt.getActionCommand();


            //Bearbeiten Einfügen
            if (cmd.equals("Einfügen")) {
    			try
    			{
      			Toolkit tk = Toolkit.getDefaultToolkit();
				Clipboard systemClipboard = tk.getSystemClipboard();
				Transferable transferData = systemClipboard.getContents(null);
				DataFlavor[] dataFlavor = transferData.getTransferDataFlavors();
				DataFlavor flavor = dataFlavor[1];
				Object content = transferData.getTransferData(flavor);
				String contentstring = content.toString();
				textfeld.setText(contentstring);
				}
				catch ( UnsupportedFlavorException e ) {}
				catch ( IOException e ) {}

			}

            //Hilfe
            if (cmd.equals("Info")) {
				textfeld.setText("");
				setTitle("Editor - Unbenannt");
			}



		}

    }
}
```


----------



## Roar (12. Mai 2004)

Anonymous hat gesagt.:
			
		

> Ich meinte, dass die fehlermeldungen bei dem Code von den Links, die du mir gegeben hast, kommen.



achso.

probier einfach mal folgenden code aus der aus einem meiner projekte entnommen ist (musst ihn natürlich anpassen. der code unterstützt auch anzeige für bilder)


```
Transferable data = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
DataFlavor[] df = data.getTransferDataFlavors();
for(int i=0; i<df.length; i++)
{
if (df[i].isMimeTypeEqual(DataFlavor.imageFlavor)) // bild
clipbwnd.imgPane.setIcon(new ImageIcon((Image) data.getTransferData(df[i])));
         // Übergabe durch eine Datei 
else if (df[i].isFlavorJavaFileListType()) { // datei
List fileList = (List) data.getTransferData(df[i]);
File firstFile = (File) fileList.get(0);
clipbwnd.imgPane.setIcon(new ImageIcon(firstFile.getAbsolutePath()));
}
}
if(data == null) {
JOptionPane.showMessageDialog(this,"Zwischenablage ist leer!","Information",JOptionPane.INFORMATION_MESSAGE); }
else {
String clipCont = (String) data.getTransferData(DataFlavor.stringFlavor);
}
// catch und so fehlt...
```


----------



## Guest (13. Mai 2004)

Der Code ist gut, insbesondere weil er auch zusätzlich noch mit Dateien umgehen kann.
Gefällt mir. Doch leider brauchte ich das nicht... *gg*
Das ist aus dem ganzen Code übriggeblieben:


```
Transferable data = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
				DataFlavor[] df = data.getTransferDataFlavors();
				try{
				String clipCont = (String) data.getTransferData(DataFlavor.stringFlavor);
				textfeld.setText(clipCont);
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, "Error -- " + e.toString(),"Error", JOptionPane.ERROR_MESSAGE);
				}
```

Musste das ganze doch in einen Try...catch-Block verpacken, sonst meckert der Kompiler....

Vielen, vielen Dank Roar!
Werd sicherlich noch öfters deine Hilfe grbauchen können  :lol:


----------

