欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java利用剪貼板實現(xiàn)交換程序間數(shù)據(jù)的方法

 更新時間:2014年07月29日 11:45:07   投稿:shichen2014  
這篇文章主要介紹了Java利用剪貼板實現(xiàn)交換程序間數(shù)據(jù)的方法,需要的朋友可以參考下

本文實例講述了Java利用剪貼板交換程序間數(shù)據(jù)的實現(xiàn)方法。在圖形化系統(tǒng)中,系統(tǒng)剪貼板非常重要,很難想象一個沒有剪貼板功能的圖形化操作系統(tǒng)使用起來會是怎樣。本例就實現(xiàn)了Java 程序與所在系統(tǒng)的剪貼板的數(shù)據(jù)交流,當(dāng)單擊“Paste”按鈕后,Java 程序從系統(tǒng)剪貼板中取得數(shù)據(jù)并顯示在一個JTextArea 組件中;當(dāng)單擊“Copy”按鈕后,文本區(qū)中的選中文本將被傳送到系統(tǒng)剪貼板上。

首先必須得到系統(tǒng)剪貼板的實例引用,java.awt.Toolkit 類中提供了getSystemClipboard()方法來返回一個Clipboard 實例;并且由于Toolkit 類提供了靜態(tài)方法getDefaultToolkit()返回一個Toolkit實例,因此也不必new 一個Toolkit 對象,具體實現(xiàn)代碼如下:

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

此處Clipboard 類提供了getContents()和setContents()方法來實現(xiàn)數(shù)據(jù)交換。

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

此處的getContents()方法從系統(tǒng)剪貼板中獲得一個Transferable 對象,參數(shù)requester 表示數(shù)據(jù)申請者,一般用this 就行了,表示要求數(shù)據(jù)的是本類的實例對象。如果要求的數(shù)據(jù)是文本,可以調(diào)用Transferable對象的getTransferData(DataFlavor.stringFlavor)得到,實現(xiàn)代碼如下:

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

setContents()方法從程序中傳數(shù)據(jù)到系統(tǒng)剪貼板,參數(shù)contents 表示數(shù)據(jù),參數(shù)owner 表示剪貼板的擁有者。

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

上面語句中的StringSelection 類表示選中的文本。
從上面的分析,實際上系統(tǒng)剪貼板中存放的是Transferable對象集合,程序和系統(tǒng)剪貼板的數(shù)據(jù)交換就是Transferable 對象的傳遞。程序代碼:

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

public class MainFrame extends JFrame {
private JPanel contentPane;
private BorderLayout borderLayout1 = new BorderLayout();
//創(chuàng)建新的組件
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(),完成各組件的初始屬性設(shè)置,并為按鈕組件添加事件監(jiān)聽器,具體代碼如下:

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() { //添加事件監(jiān)聽器
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() {//添加事件監(jiān)聽器
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”按鈕的事件處理方法,向系統(tǒng)剪貼板發(fā)送數(shù)據(jù)。

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

6.編寫“Paste”按鈕的事件處理方法,從系統(tǒng)剪貼板獲得數(shù)據(jù)。

void jButton2_actionPerformed(ActionEvent e) {
try{
Transferable tr = cb.getContents(this); //從系統(tǒng)剪貼板得到一個Transferable 對象
if (tr != null){
String s = (String) tr.getTransferData(DataFlavor.stringFlavor); //從Transferable 對象中得到文本數(shù)據(jù)
if (s!=null)
this.jTextArea1.insert(s,this.jTextArea1.getCaretPosition()); //在JTextArea 組件中的光標(biāo)所在處插入文本
}
}catch(Exception err){
err.printStackTrace();
}
}

相關(guān)文章

  • Java Proxy機制詳細(xì)解讀

    Java Proxy機制詳細(xì)解讀

    這篇文章主要介紹了Java Proxy機制詳細(xì)解讀,還是非常不錯的,這里分享給大家,需要的朋友可以參考下。
    2017-10-10
  • SpringBoot+MybatisPlus+Mysql+JSP實戰(zhàn)

    SpringBoot+MybatisPlus+Mysql+JSP實戰(zhàn)

    這篇文章主要介紹了SpringBoot+MybatisPlus+Mysql+JSP實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • feign調(diào)用第三方接口,編碼定義GBK,響應(yīng)中文亂碼處理方式

    feign調(diào)用第三方接口,編碼定義GBK,響應(yīng)中文亂碼處理方式

    這篇文章主要介紹了feign調(diào)用第三方接口,編碼定義GBK,響應(yīng)中文亂碼處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring中propagation的傳播機制詳解

    Spring中propagation的傳播機制詳解

    這篇文章主要介紹了Spring中propagation的傳播機制詳解,要搞懂事務(wù)的傳播機制,那么就要明白邏輯事務(wù)中各個事務(wù)的關(guān)系,才能徹底理解事務(wù)傳播特性,在Spring事務(wù)中,各個邏輯事務(wù)的關(guān)系可以是并列、覆蓋或包含,需要的朋友可以參考下
    2023-12-12
  • Java8接口之默認(rèn)方法與靜態(tài)方法詳解

    Java8接口之默認(rèn)方法與靜態(tài)方法詳解

    java8中為接口新增了一項功能,定義一個或者更多個靜態(tài)方法,類似于類中的靜態(tài)方法,接口定義的靜態(tài)方法可以獨立于任何對象調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Java8接口之默認(rèn)方法與靜態(tài)方法的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Java日常練習(xí)題,每天進(jìn)步一點點(18)

    Java日常練習(xí)題,每天進(jìn)步一點點(18)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • 關(guān)于Maven混合配置私有倉庫和公共倉庫的問題

    關(guān)于Maven混合配置私有倉庫和公共倉庫的問題

    這篇文章主要介紹了Maven混合配置私有倉庫和公共倉庫,通過實例代碼詳細(xì)介紹了私有和公共倉庫混合配置的方法,需要的朋友可以參考下
    2022-06-06
  • Java對象在JVM中的生命周期詳解

    Java對象在JVM中的生命周期詳解

    這篇文章主要介紹了Java對象在JVM中的生命周期詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法

    淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法

    這篇文章主要介紹了淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java 兩種延時thread和timer詳解及實例代碼

    Java 兩種延時thread和timer詳解及實例代碼

    這篇文章主要介紹了Java 兩種延時thread和timer詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論