Java利用剪貼簿實作交換程式間資料的方法
本文實例講述了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(); } }
更多Java利用剪貼簿實現交換程序間資料的方法相關文章請關注PHP中文網!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
