Cet article décrit la méthode d'implémentation de Java utilisant le presse-papiers pour échanger des données entre programmes. Dans les systèmes graphiques, le presse-papiers système est très important. Il est difficile d'imaginer comment un système d'exploitation graphique sans fonction de presse-papiers serait utilisé. Cet exemple réalise l'échange de données entre le programme Java et le presse-papier du système. Lorsque l'on clique sur le bouton "Coller", le programme Java récupère les données du presse-papier du système et les affiche dans un composant JTextArea lorsque l'on appuie sur le bouton "Copier" ; est cliqué. Après cela, le texte sélectionné dans la zone de texte sera transféré dans le presse-papiers du système.
Tout d'abord, vous devez obtenir une référence d'instance au presse-papiers du système. La classe java.awt.Toolkit fournit la méthode getSystemClipboard() pour renvoyer une instance du Presse-papiers et puisque la classe Toolkit fournit la méthode statique getDefaultToolkit() pour renvoyer une instance de Toolkit ; il n'est pas nécessaire d'en créer un nouvel objet Toolkit, le code d'implémentation spécifique est le suivant :
Presse-papiers cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Ici, la classe Clipboard fournit les méthodes getContents() et setContents() pour implémenter l'échange de données.
GetContents transférables (demandeur d'objet); Void setContents (contenu transférable, propriétaire du ClipboardOwner);
La méthode getContents() obtient ici un objet transférable à partir du presse-papiers du système. Le paramètre demandeur représente le demandeur de données. Généralement, cela suffit, indiquant que la demande de données est un objet d'instance de cette classe. Si les données requises sont du texte, vous pouvez appeler getTransferData(DataFlavor.stringFlavor) de l'objet Transferable pour l'obtenir. Le code d'implémentation est le suivant :
Transférable tr = cb.getContents(this);String s = (String) tr.getTransferData(DataFlavor.stringFlavor);
La méthode setContents() transfère les données du programme vers le presse-papiers du système. Le contenu du paramètre représente les données et le propriétaire du paramètre représente le propriétaire du presse-papiers.
StringSelection ss = new StringSelection(this.jTextArea1.getText());cb.setContents(ss,ss);
La classe StringSelection dans l'instruction ci-dessus représente le texte sélectionné.
D'après l'analyse ci-dessus, en fait, le presse-papiers du système stocke une collection d'objets transférables, et l'échange de données entre le programme et le presse-papiers du système est le transfert d'objets transférables. Code du programme :
1. Créez un nouveau projet et nommez-le JClipDemo.
2. Créez une nouvelle application et nommez-la JClipDemo ; nommez la fenêtre principale MainFrame et nommez-la JClipDemo.
3. Ajoutez un composant JTextArea, deux JButtons et un composant JPanel à la fenêtre de conception de la classe MainFrame et placez les deux composants JButton sur le composant JPanel. Ajouter une nouvelle propriété Presse-papiers cb. Le code spécifique est le suivant :
public class MainFrame extends JFrame {private JPanel contentPane;private BorderLayout borderLayout1 = new BorderLayout();//Créer un nouveau composant private JTextArea jTextArea1 = new JTextArea();private JPanel jPanel1 = new JPanel();private JButton jButton1 = new JButton( );JButton privé jButton2 = nouveau JButton();//Clipboard instanceClipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();……}
4. Écrivez la méthode d'initialisation jbInit() de la classe MainFrame, complétez les paramètres de propriété initiaux de chaque composant et ajoutez un écouteur d'événement pour le composant bouton. Le code spécifique est le suivant :
private void jbInit() lève une exception {//setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[Votre icône]")));contentPane = (JPanel) this.getContentPane();contentPane.setLayout (borderLayout1);this.setSize(nouvelle Dimension(396, 203));this.setTitle("JClipboardDemo");jButton1.setFont(new java.awt.Font("Dialog", 0, 14));jButton1.setText("Copy");jButton1.addActionListener(new java. awt.event.ActionListener() { //Ajouter un écouteur d'événement public void actionPerformed(ActionEvent e) {jButton1_actionPerformed(e);}});jButton2.setFont(new java.awt.Font("Dialog", 0, 14));jButton2.setText("Paste");jButton2.addActionListener(new java.awt .event.ActionListener() {//Ajouter un écouteur d'événement public void actionPerformed(ActionEvent e) {jButton2_actionPerformed(e);}});contentPane.add(jTextArea1, BorderLayout.CENTER);contentPane.add(jPanel1, BorderLayout.SOUTH);jPanel1.add(jButton1, null);jPanel1.add(jButton2, null); }
5. Écrivez la méthode de gestion des événements du bouton "Copier" pour envoyer les données dans le presse-papiers du système.
void jButton1_actionPerformed(ActionEvent e) {StringSelection ss = new StringSelection(this.jTextArea1.getText()); //Envoyer le texte sélectionné au presse-papiers du système cb.setContents(ss,ss);}
6. Écrivez la méthode de gestion des événements du bouton "Coller" pour obtenir les données du presse-papiers du système.
void jButton2_actionPerformed(ActionEvent e) {try{Transferable tr = cb.getContents(this); //Obtenir un objet transférable à partir du presse-papiers du système if (tr != null){String s = (String) tr.getTransferData(DataFlavor.stringFlavor ); //Obtenir des données texte à partir d'un objet transférable si (s!=null)this.jTextArea1.insert(s,this.jTextArea1.getCaretPosition()); //Insérer du texte à la position du curseur dans le composant JTextArea}}catch(Exception err){err.printStackTrace();} }