Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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...
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)...
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.
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...
Code:
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");
}
}
}
}
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)
Code:
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...
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: