Capturar texto seleccionado y copiado, con un evento

Iniciado por noobdai, 15 Marzo 2010, 18:01 PM

0 Miembros y 1 Visitante están viendo este tema.

noobdai

Saludos.

Necesito saber que evento puedo utilizar para poder capturar desde otra parte que no sea la misma interfaz del programa,el texto que selecciono y copio.

Por ejemplo: cuando selecciono una parte del texto de una pagina web y lo copio.

Saludos

danielo-

#1
ammm... no se como hacer eso que pides, pero una vez que tuve q hacer algo parecido lo soluciones podiendo un JDialog en una esquina de la pantalla la cual se mantenia todo el tiempo visible y sobre cualkier cosa (setAlwaysOnTop(true)), la cual cada vez  que necesitaba mandar algo al portapales, seleccionaba lo que necesitaba, y lo arrastraba hasta donde se encontraba el JDialog... y..... pues no es lo que necesitas, pero funciona.
Otra opción que me dio mi maestro es hacer un "enganche" o "hook" al mouse, para lo cual necesitas usar c++ y pasarselo a java como  nativo, en otras palabra, esta dificil de hacer, pues ya se trata de interactuar con el sistema operativo, yo no lo logre... jajaja..

Código (java) [Seleccionar]

import java.awt.BorderLayout;
import java.net.URL;
import java.awt.Toolkit;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.Image;
import java.awt.Color;
import java.awt.Graphics;

import java.net.Socket;

public class ClipBoard extends JFrame implements DropTargetListener {
DropTarget dt;
JTextArea ta = new JTextArea () ;
String path;
String ip;
int puerto2;
Toolkit  pic,pic2;
URL url,url2;

boolean estado=false;

public ClipBoard () {

getContentPane () .add ( ta, BorderLayout.CENTER ) ;
dt = new DropTarget ( ta, this ) ;

ta.setBackground(Color.WHITE);
setSize(100, 100);
setLocation(15, 15);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setAlwaysOnTop(true);
}

public void dragExit ( DropTargetEvent dte ) {}
public void dragOver ( DropTargetDragEvent dtde ) { }
public void dropActionChanged ( DropTargetDragEvent dtde ) {}

public void dragEnter ( DropTargetDragEvent dtde ) {
System.out.println ( "entro" ) ;
}

public void drop ( DropTargetDropEvent dtde ) {
try {
int i=0;
Transferable tr = dtde.getTransferable ();
DataFlavor [] flavors = tr.getTransferDataFlavors () ;
if ( flavors [ i ] .isFlavorJavaFileListType ()) {
dtde.acceptDrop ( DnDConstants.ACTION_COPY_OR_MOVE ) ;
path=""+tr.getTransferData ( flavors [ i ]);
path=path.substring(1,path.length()-1);
ta.append (path+"\n");
System.out.println(path);
estado=true;

repaint();
dtde.dropComplete ( true ) ;
return ;
}
dtde.rejectDrop () ;
}
catch ( Exception e ) {
System.out.println("1_Clipboard");
e.printStackTrace () ;
dtde.rejectDrop () ;
}
}

public static void main(String arg[]){
ClipBoard clip=new ClipBoard();
}
}




Esta es una pequeña clase, lo que haces, es que cualquier archivo que arrastres al jdialog te devuelve la ruta donde esta almacenada (aunque puedes agregarle que haga mas cosa, solo hay que investigar un poco), pero parece que solo funciona en windows, lo cheque en linux y me parece, mas no estoy seguro de que no funciona, espero te sirva.

Saludos

noobdai

Cita de: danyelk_6u5 en 15 Marzo 2010, 18:37 PM
ammm... no se como hacer eso que pides, pero una vez que tuve q hacer algo parecido lo soluciones podiendo un JDialog en una esquina de la pantalla la cual se mantenia todo el tiempo visible y sobre cualkier cosa (setAlwaysOnTop(true)), la cual cada vez  que necesitaba mandar algo al portapales, seleccionaba lo que necesitaba, y lo arrastraba hasta donde se encontraba el JDialog... y..... pues no es lo que necesitas, pero funciona.
Otra opción que me dio mi maestro es hacer un "enganche" o "hook" al mouse, para lo cual necesitas usar c++ y pasarselo a java como  nativo, en otras palabra, esta dificil de hacer, pues ya se trata de interactuar con el sistema operativo, yo no lo logre... jajaja..

Código (java) [Seleccionar]

import java.awt.BorderLayout;
import java.net.URL;
import java.awt.Toolkit;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.Image;
import java.awt.Color;
import java.awt.Graphics;

import java.net.Socket;

public class ClipBoard extends JFrame implements DropTargetListener {
DropTarget dt;
JTextArea ta = new JTextArea () ;
String path;
String ip;
int puerto2;
Toolkit  pic,pic2;
URL url,url2;

boolean estado=false;

public ClipBoard () {

getContentPane () .add ( ta, BorderLayout.CENTER ) ;
dt = new DropTarget ( ta, this ) ;

ta.setBackground(Color.WHITE);
setSize(100, 100);
setLocation(15, 15);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setAlwaysOnTop(true);
}

public void dragExit ( DropTargetEvent dte ) {}
public void dragOver ( DropTargetDragEvent dtde ) { }
public void dropActionChanged ( DropTargetDragEvent dtde ) {}

public void dragEnter ( DropTargetDragEvent dtde ) {
System.out.println ( "entro" ) ;
}

public void drop ( DropTargetDropEvent dtde ) {
try {
int i=0;
Transferable tr = dtde.getTransferable ();
DataFlavor [] flavors = tr.getTransferDataFlavors () ;
if ( flavors [ i ] .isFlavorJavaFileListType ()) {
dtde.acceptDrop ( DnDConstants.ACTION_COPY_OR_MOVE ) ;
path=""+tr.getTransferData ( flavors [ i ]);
path=path.substring(1,path.length()-1);
ta.append (path+"\n");
System.out.println(path);
estado=true;

repaint();
dtde.dropComplete ( true ) ;
return ;
}
dtde.rejectDrop () ;
}
catch ( Exception e ) {
System.out.println("1_Clipboard");
e.printStackTrace () ;
dtde.rejectDrop () ;
}
}

public static void main(String arg[]){
ClipBoard clip=new ClipBoard();
}
}




Esta es una pequeña clase, lo que haces, es que cualquier archivo que arrastres al jdialog te devuelve la ruta donde esta almacenada (aunque puedes agregarle que haga mas cosa, solo hay que investigar un poco), pero parece que solo funciona en windows, lo cheque en linux y me parece, mas no estoy seguro de que no funciona, espero te sirva.

Saludos

Gracias por tu idea danyelk_6u5  pero me gustaría saber como hacerlo mediante un evento directo.

De todas formas agradezco tú ayuda  :)
Saludos

Debci