Maison  >  Article  >  Java  >  Java utilise le presse-papiers pour échanger des données entre programmes

Java utilise le presse-papiers pour échanger des données entre programmes

高洛峰
高洛峰original
2017-01-11 15:25:111548parcourir

L'exemple de cet article décrit comment Java utilise le presse-papiers pour échanger des données entre programmes. Dans les systèmes graphiques, le presse-papiers du 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.

Vous devez d'abord obtenir la référence d'instance du presse-papiers du système. La classe java.awt.Toolkit fournit la méthode getSystemClipboard() pour renvoyer une instance du Presse-papiers et parce que la classe Toolkit fournit la méthode statique getDefaultToolkit() pour renvoyer une instance du Presse-papiers du système. renvoie une instance Toolkit , il n'est donc pas nécessaire de créer un nouvel objet Toolkit. Le code d'implémentation spécifique est le suivant :

Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();

Ici, la classe Clipboard. fournit les méthodes getContents() et setContents().

Transferable getContents(Object requester);
Void setContents(Transferable contents, ClipboardOwner owner);

La méthode getContents() obtient ici un objet transférable à partir du presse-papiers du système. Le paramètre requester représente le demandeur de données. Généralement, cela suffit. , indiquant que les données demandées sont 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 :

Transferable tr = cb.getContents(this);
String s = (String) tr.getTransferData(DataFlavor.stringFlavor);

<.>Méthode setContents() de Dans le programme, les données sont transférées 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 intitulez-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();
//创建新的组件
private JTextArea jTextArea1 = new JTextArea();
private JPanel jPanel1 = new JPanel();
private JButton jButton1 = new JButton();
private JButton jButton2 = new JButton();
//剪贴板实例
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
……
}

4. Écrivez la méthode d'initialisation jbInit() de la classe MainFrame, complétez les paramètres d'attribut initiaux de chaque composant et ajoutez des écouteurs d'événement pour les composants du bouton. Le code spécifique est le suivant :

private void jbInit() throws Exception {
//setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new 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() { //添加事件监听器
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() {//添加事件监听器
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()); //发送选中文本到系统剪贴板
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.

Pour plus d'articles sur la façon dont Java utilise le presse-papiers pour échanger des données entre programmes, veuillez faire attention au site Web PHP chinois !
void jButton2_actionPerformed(ActionEvent e) {
try{
Transferable tr = cb.getContents(this); //从系统剪贴板得到一个Transferable 对象
if (tr != null){
String s = (String) tr.getTransferData(DataFlavor.stringFlavor); //从Transferable 对象中得到文本数据
if (s!=null)
this.jTextArea1.insert(s,this.jTextArea1.getCaretPosition()); //在JTextArea 组件中的光标所在处插入文本
}
}catch(Exception err){
err.printStackTrace();
}
}

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn