ya conozco la solución de LOSTOWNERSHIP
incluso aki tengo el codigo
Código:
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.FlavorEvent;
import java.awt.datatransfer.FlavorListener;
import java.awt.datatransfer.Transferable;
public class ClipboardTextListener {
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Owner owner = new Owner();
public void comienzaAEscuchar () {
cb.addFlavorListener(new CentinelaFlavor (cb) );
Transferable contents = cb.getContents(owner);
cb.setContents(contents, owner);
}
class Owner implements ClipboardOwner{
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
try {Transferable newContents = clipboard.getContents(this);
if (contents.getTransferData(DataFlavor.stringFlavor).equals(newContents.getTransferData(DataFlavor.stringFlavor))) return;
clipboard.setContents(newContents, this);
System.out.println("a");
textoHaCambiado ( (String) clipboard.getData(DataFlavor.stringFlavor));
} catch (Exception e) {
System.out.println ("No fue texto"); //Puedes borrar esto
}
}
}
class CentinelaFlavor implements FlavorListener {
private Clipboard c;
public CentinelaFlavor (Clipboard c) {
this.c = c;
}
public void flavorsChanged(FlavorEvent e) {
try {
System.out.println("b");
Owner o = new Owner();
String nuevaString = (String) c.getContents(o).getTransferData(DataFlavor.stringFlavor);
c.setContents(c.getContents(o), new Owner() );
textoHaCambiado ( nuevaString);
} catch (Exception ex) {System.out.println ("No fue texto 2");/*Puedes borrar este*/ }
}
}
protected void textoHaCambiado(String nuevoTexto) {
System.out.println(nuevoTexto);
}
}
pero surge un problema si mas de una aplicación hace esto
digamos si el Jdownloader esta funcionando al mismo tiempo, y copio algun texto ambos programas
se pelean por el portapepeles
uno le quita ownership al otro, y el otro se la vuelve a quitar al primero ,causando k el primero se la quite al segundo.......
existe alguna otra solución?
algun evento que escuche el portapepeles?
gracias gente :3