Este artículo describe el método de implementación de Java utilizando el portapapeles para intercambiar datos entre programas. En los sistemas gráficos, el portapapeles del sistema es muy importante. Es difícil imaginar cómo se utilizaría un sistema operativo gráfico sin función de portapapeles. Este ejemplo realiza el intercambio de datos entre el programa Java y el portapapeles del sistema. Cuando se hace clic en el botón "Pegar", el programa Java obtiene los datos del portapapeles del sistema y los muestra en un componente JTextArea; Se hace clic en Después de eso, el texto seleccionado en el área de texto se transferirá al portapapeles del sistema.
Primero, debe obtener una referencia de instancia al portapapeles del sistema. La clase java.awt.Toolkit proporciona el método getSystemClipboard() para devolver una instancia de Portapapeles y dado que la clase Toolkit proporciona el método estático getDefaultToolkit() para devolver una instancia de Toolkit; No es necesario crear uno nuevo. El código de implementación específico es el siguiente.
Portapapeles cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Aquí, la clase Portapapeles proporciona los métodos getContents() y setContents() para implementar el intercambio de datos.
GetContents transferible (solicitante de objeto); Void setContents (contenidos transferibles, propietario del portapapeles);
El método getContents() aquí obtiene un objeto Transferible del portapapeles del sistema. El solicitante de parámetros representa al solicitante de datos. Generalmente, esto es suficiente, lo que indica que la solicitud de datos es un objeto de instancia de esta clase. Si los datos requeridos son texto, puede llamar a getTransferData(DataFlavor.stringFlavor) del objeto Transferible para obtenerlo. El código de implementación es el siguiente:
Transferible tr = cb.getContents(this);String s = (String) tr.getTransferData(DataFlavor.stringFlavor);
El método setContents () transfiere datos del programa al portapapeles del sistema. El contenido del parámetro representa los datos y el propietario del parámetro representa el propietario del portapapeles.
StringSelection ss = new StringSelection(this.jTextArea1.getText());cb.setContents(ss,ss);
La clase StringSelection en la declaración anterior representa el texto seleccionado.
Según el análisis anterior, de hecho, el portapapeles del sistema almacena una colección de objetos transferibles, y el intercambio de datos entre el programa y el portapapeles del sistema es la transferencia de objetos transferibles. Código de programa:
1. Cree un nuevo proyecto y asígnele el nombre JClipDemo.
2. Cree una nueva aplicación y asígnele el nombre JClipDemo; asigne a la ventana principal el nombre MainFrame y asígnele el título JClipDemo.
3. Agregue un componente JTextArea, dos JButtons y un componente JPanel a la ventana de diseño de la clase MainFrame y coloque los dos componentes JButton en el componente JPanel. Agregar nueva propiedad Portapapeles cb. El código específico es el siguiente:
public class MainFrame extiende JFrame {private JPanel contentPane;private BorderLayout borderLayout1 = new BorderLayout();//Crear un nuevo componente private JTextArea jTextArea1 = new JTextArea();private JPanel jPanel1 = new JPanel();private JButton jButton1 = new JButton( );JButton privado jButton2 = nuevo JButton();// Instancia del portapapelesClipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();……}
4. Escriba el método de inicialización jbInit () de la clase MainFrame, complete la configuración de propiedades iniciales de cada componente y agregue un detector de eventos para el componente del botón. El código específico es el siguiente:
private void jbInit() lanza una excepción {//setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[Su icono]")));contentPane = (JPanel) this.getContentPane();contentPane.setLayout (borderLayout1);this.setSize(nueva Dimensión(396, 203));this.setTitle("JClipboardDemo");jButton1.setFont(new java.awt.Font("Dialog", 0, 14));jButton1.setText("Copiar");jButton1.addActionListener(new java. awt.event.ActionListener() { //Agregar detector de eventos public void actionPerformed(ActionEvent e) {jButton1_actionPerformed(e);}});jButton2.setFont(nuevo java.awt.Font("Dialog", 0, 14));jButton2.setText("Pegar");jButton2.addActionListener(nuevo java.awt .event.ActionListener() {//Agregar detector de eventos public void actionPerformed(ActionEvent e) {jButton2_actionPerformed(e);}});contentPane.add(jTextArea1, BorderLayout.CENTER);contentPane.add(jPanel1, BorderLayout.SOUTH);jPanel1.add(jButton1, nulo);jPanel1.add(jButton2, nulo); }
5. Escriba el método de manejo de eventos del botón "Copiar" para enviar datos al portapapeles del sistema.
void jButton1_actionPerformed(ActionEvent e) {StringSelection ss = new StringSelection(this.jTextArea1.getText()); //Envía el texto seleccionado al portapapeles del sistema cb.setContents(ss,ss);}
6. Escriba el método de manejo de eventos del botón "Pegar" para obtener datos del portapapeles del sistema.
void jButton2_actionPerformed(ActionEvent e) {try{Transferable tr = cb.getContents(this); //Obtener un objeto transferible del portapapeles del sistema if (tr != null){String s = (String) tr.getTransferData(DataFlavor.stringFlavor ); //Obtener datos de texto del objeto transferible si (s!=null)this.jTextArea1.insert(s,this.jTextArea1.getCaretPosition()); //Inserte texto en la posición del cursor en el componente JTextArea}}catch(Exception err){err.printStackTrace();} }