java 监测粘贴板事件_Java 监视系统剪贴板
當(dāng)系統(tǒng)剪貼板中的文本變化時,處理文本并將結(jié)果保存到剪貼板。
1.[代碼][Java]代碼
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import javax.swing.JFrame;
/**
* 剪貼板監(jiān)控器
* 負(fù)責(zé)對剪貼板的監(jiān)控和操作
* 由于監(jiān)控需要一個對象作為ClipboardOwner,故不能用靜態(tài)類
* 不用FlavorListener是因為它僅監(jiān)控剪貼板中數(shù)據(jù)類型的變化
*/
public class SystemClipboardMonitor implements ClipboardOwner{
private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
private boolean going; //控制開關(guān)
/*****************
* 開始監(jiān)視剪貼板 *
* ***************/
public void begin(){
going = true;
//將剪貼板中內(nèi)容的ClipboardOwner設(shè)置為自己
//這樣當(dāng)其中內(nèi)容變化時,就會觸發(fā)lostOwnership事件
clipboard.setContents(clipboard.getContents(null), this);
}
/*****************
* 停止監(jiān)視剪貼板 *
* ***************/
public void stop(){
going = false;
}
/************
* 測試代碼 *
* **********/
public static void main(String[] args) {
SystemClipboardMonitor tmp = new SystemClipboardMonitor();
tmp.begin(); //開始監(jiān)視
new JFrame().setVisible(true);// 軟件窗口
}
/*******************************************
* 如果剪貼板的內(nèi)容改變,則系統(tǒng)自動調(diào)用此方法 *
*******************************************/
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
if (going){ //如果是進(jìn)行中狀態(tài),則操作
// 如果不暫停一下,經(jīng)常會拋出IllegalStateException
// 猜測是操作系統(tǒng)正在使用系統(tǒng)剪切板,故暫時無法訪問
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 取出文本并進(jìn)行一次文本處理
// 如果剪貼板中有文本:
if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)){
try {
String text = (String)clipboard.getData(DataFlavor.stringFlavor);
String clearedText = Texts.handle(text);
// 存入剪貼板,并注冊自己為所有者
// 這樣下次剪貼板內(nèi)容改變時,仍然可以觸發(fā)此事件
StringSelection tmp = new StringSelection(clearedText);
clipboard.setContents(tmp, this);
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {
// 如果剪貼板中沒有文本,仍然將自己設(shè)置為它的ClipboardOwner
clipboard.setContents(clipboard.getContents(null), this);
}
}
}
}
總結(jié)
以上是生活随笔為你收集整理的java 监测粘贴板事件_Java 监视系统剪贴板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 儿童吹泡泡水简单配方_小孩吹泡泡的 泡泡
- 下一篇: fpga板子怎么和电脑连_[笔记].怎样