Java利用剪貼簿實現交換程式間資料的方法_java

來源:互聯網
上載者:User

本文執行個體講述了Java利用剪貼簿交換程式間資料的實現方法。在圖形化系統中,系統剪貼簿非常重要,很難想象一個沒有剪貼簿功能的圖形化作業系統使用起來會是怎樣。本例就實現了Java 程式與所在系統的剪貼簿的資料交流,當單擊“Paste”按鈕後,Java 程式從系統剪貼簿中取得資料並顯示在一個JTextArea 組件中;當單擊“Copy”按鈕後,文本區中的選中文本將被傳送到系統剪貼簿上。

首先必須得到系統剪貼簿的執行個體引用,java.awt.Toolkit 類中提供了getSystemClipboard()方法來返回一個Clipboard 執行個體;並且由於Toolkit 類提供了靜態方法getDefaultToolkit()返回一個Toolkit執行個體,因此也不必new 一個Toolkit 對象,具體實現代碼如下:

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

此處Clipboard 類提供了getContents()和setContents()方法來實現資料交換。

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

此處的getContents()方法從系統剪貼簿中獲得一個Transferable 對象,參數requester 表示資料申請者,一般用this 就行了,表示要求資料的是本類的執行個體對象。如果要求的資料是文本,可以調用Transferable對象的getTransferData(DataFlavor.stringFlavor)得到,實現代碼如下:

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

setContents()方法從程式中傳資料到系統剪貼簿,參數contents 表示資料,參數owner 表示剪貼簿的擁有者。

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

上面語句中的StringSelection 類表示選中的文本。
從上面的分析,實際上系統剪貼簿中存放的是Transferable對象集合,程式和系統剪貼簿的資料交換就是Transferable 對象的傳遞。程式碼:

1.建立一個Project,取名為JClipDemo。
2.建立一個Application,取名為JClipDemo;主視窗名取名為MainFrame,標題為JClipDemo。
3.在MainFrame 類的設計視窗中添加一個JTextArea 組件、兩個JButton 和一個JPanel 組件,並且兩個JButton 組件放在JPanel 組件上。添加新的屬性Clipboard cb。具體代碼如下:

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.編寫MainFrame 類的初始化方法jbInit(),完成各組件的初始屬性設定,並為按鈕組件添加事件監聽器,具體代碼如下:

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.編寫“Copy”按鈕的事件處理方法,向系統剪貼簿發送資料。

void jButton1_actionPerformed(ActionEvent e) {StringSelection ss = new StringSelection(this.jTextArea1.getText()); //發送選中文本到系統剪貼簿cb.setContents(ss,ss);}

6.編寫“Paste”按鈕的事件處理方法,從系統剪貼簿獲得資料。

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();}}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.