Hallo,
in meinem Java Programm soll in eine TextArea automatisch ein kopierter Text eingefügt werden.
Genauer: Ich möchte, dass ich irgendwo mit STRG+C (oder rechtsklick-> kopieren) einen Text kopiere und dieser dann selbstständig eingefügt wird.
ich habe gelesen, dass es irgendwie mit dem ClipboardOwner und dem lostOwnership funktionieren soll, aber ich komme einfach nicht dahinter wie?
Wäre sehr dankbar wenn mir jemand einen Code Schnipsel posten könnte. In erster Linie geht es mir um den Code der dem Programm "sagt", dass sich die Zwischenablage geändert hat. Wie ich den Text aus der Zwischenablage in die TextArea bekomme weis ich.
Folgenden Code habe ich im Forum gefunden:
Hier kann allerdings der gleiche Text nicht zweimal kopiert werden (wenn man die entsprechende Abfrage (letze Bedingung in Zeile 40) löscht, produziert man eine Endlosschleife aufgrund des Timers).
Wenn jamend eine bessere Lösung hat wäre ich sehr dankbar, da diese hier nicht optimal ist.
Herzlichen Dank für eure Antworten!
in meinem Java Programm soll in eine TextArea automatisch ein kopierter Text eingefügt werden.
Genauer: Ich möchte, dass ich irgendwo mit STRG+C (oder rechtsklick-> kopieren) einen Text kopiere und dieser dann selbstständig eingefügt wird.
ich habe gelesen, dass es irgendwie mit dem ClipboardOwner und dem lostOwnership funktionieren soll, aber ich komme einfach nicht dahinter wie?
Wäre sehr dankbar wenn mir jemand einen Code Schnipsel posten könnte. In erster Linie geht es mir um den Code der dem Programm "sagt", dass sich die Zwischenablage geändert hat. Wie ich den Text aus der Zwischenablage in die TextArea bekomme weis ich.
Folgenden Code habe ich im Forum gefunden:
Java:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.Timer;
public class clipBordtest extends JFrame implements ActionListener {
private Clipboard clip = null;
Transferable old = null;
Timer t;
public clipBordtest() {
setTitle("Clipbordtest");
setAlwaysOnTop(true);
setSize(new Dimension(250, 250));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
clip = Toolkit.getDefaultToolkit().getSystemClipboard();
old = clip.getContents(null);
t = new Timer(500, this);
t.start();
}
@Override
public void actionPerformed(ActionEvent e) {
Transferable trans = clip.getContents(null);
try {
if (trans.isDataFlavorSupported(DataFlavor.stringFlavor) && trans != null && !trans.getTransferData(DataFlavor.stringFlavor).equals(old.getTransferData(DataFlavor.stringFlavor))) {
System.out.println("Old: " + old.getTransferData(DataFlavor.stringFlavor));
System.out.println("New: " + trans.getTransferData(DataFlavor.stringFlavor));
old = trans;
}
} catch (UnsupportedFlavorException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public static void main(String arg[]) {
new clipBordtest();
}
}
Hier kann allerdings der gleiche Text nicht zweimal kopiert werden (wenn man die entsprechende Abfrage (letze Bedingung in Zeile 40) löscht, produziert man eine Endlosschleife aufgrund des Timers).
Wenn jamend eine bessere Lösung hat wäre ich sehr dankbar, da diese hier nicht optimal ist.
Herzlichen Dank für eure Antworten!