Heim  >  Artikel  >  Java  >  Java nutzt die Zwischenablage, um den Datenaustausch zwischen Programmen zu implementieren

Java nutzt die Zwischenablage, um den Datenaustausch zwischen Programmen zu implementieren

高洛峰
高洛峰Original
2017-01-11 15:25:111494Durchsuche

Das Beispiel in diesem Artikel beschreibt, wie Java die Zwischenablage verwendet, um Daten zwischen Programmen auszutauschen. In grafischen Systemen ist die Systemzwischenablage sehr wichtig. Es ist schwer vorstellbar, wie ein grafisches Betriebssystem ohne Zwischenablagefunktion verwendet werden könnte. In diesem Beispiel wird der Datenaustausch zwischen dem Java-Programm und der Zwischenablage des Systems realisiert, in dem es sich befindet. Wenn auf die Schaltfläche „Einfügen“ geklickt wird, ruft das Java-Programm die Daten aus der System-Zwischenablage ab und zeigt sie in einer JTextArea-Komponente an Klicken Sie auf die Schaltfläche „Kopieren“. Anschließend wird der ausgewählte Text im Textbereich in die Zwischenablage des Systems übertragen.

Zuerst müssen Sie die Instanzreferenz der Systemzwischenablage abrufen. Die Klasse java.awt.Toolkit stellt die Methode getSystemClipboard() bereit, um eine Zwischenablageinstanz zurückzugeben Geben Sie eine Toolkit-Instanz zurück, sodass kein neues Toolkit-Objekt erstellt werden muss. Der spezifische Implementierungscode lautet wie folgt:

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

Hier die Clipboard-Klasse stellt die Methoden getContents() und setContents() bereit.

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

Die Methode getContents() ruft hier ein übertragbares Objekt aus der Systemzwischenablage ab. Im Allgemeinen ist dies ausreichend. , was darauf hinweist, dass die angeforderten Daten ein Instanzobjekt dieser Klasse sind. Wenn es sich bei den erforderlichen Daten um Text handelt, können Sie getTransferData(DataFlavor.stringFlavor) des Transferable-Objekts aufrufen, um ihn abzurufen. Der Implementierungscode lautet wie folgt:

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

setContents() Methode von Im Programm werden Daten in die Systemzwischenablage übertragen. Der Parameterinhalt repräsentiert die Daten und der Parameterbesitzer repräsentiert den Besitzer der Zwischenablage.

StringSelection ss = new StringSelection(this.jTextArea1.getText());
cb.setContents(ss,ss);

Die StringSelection-Klasse in der obigen Anweisung repräsentiert den ausgewählten Text.
Aus der obigen Analyse geht hervor, dass die Systemzwischenablage tatsächlich eine Sammlung übertragbarer Objekte speichert, und der Datenaustausch zwischen dem Programm und der Systemzwischenablage ist die Übertragung übertragbarer Objekte. Programmcode:

1. Erstellen Sie ein neues Projekt und nennen Sie es JClipDemo.
2. Erstellen Sie eine neue Anwendung und nennen Sie sie JClipDemo. Benennen Sie das Hauptfenster MainFrame und nennen Sie es JClipDemo.
3. Fügen Sie eine JTextArea-Komponente, zwei JButtons und eine JPanel-Komponente zum Designfenster der MainFrame-Klasse hinzu und platzieren Sie die beiden JButton-Komponenten auf der JPanel-Komponente. Neue Eigenschaft hinzufügen. Zwischenablage cb. Der spezifische Code lautet wie folgt:

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. Schreiben Sie die Initialisierungsmethode jbInit() der MainFrame-Klasse, vervollständigen Sie die anfänglichen Eigenschaftseinstellungen jeder Komponente und fügen Sie Ereignis-Listener für die Schaltflächenkomponenten hinzu. Der spezifische Code lautet wie folgt:

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. Schreiben Sie die Ereignisbehandlungsmethode der Schaltfläche „Kopieren“, um Daten in die Systemzwischenablage zu senden.

void jButton1_actionPerformed(ActionEvent e) {
StringSelection ss = new StringSelection(this.jTextArea1.getText()); //发送选中文本到系统剪贴板
cb.setContents(ss,ss);
}

6. Schreiben Sie die Ereignisbehandlungsmethode der Schaltfläche „Einfügen“, um Daten aus der Systemzwischenablage abzurufen.

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();
}
}

Weitere verwandte Artikel darüber, wie Java die Zwischenablage zum Datenaustausch zwischen Programmen verwendet, finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn