1+ package com .xwintop .xJavaFxTool .services .developTools ;
2+
3+ import cn .hutool .core .date .DateUtil ;
4+ import com .xwintop .xJavaFxTool .controller .developTools .ClipboardHistoryToolController ;
5+ import javafx .scene .control .TextArea ;
6+ import lombok .Getter ;
7+ import lombok .Setter ;
8+ import lombok .extern .slf4j .Slf4j ;
9+
10+ import java .awt .datatransfer .Clipboard ;
11+ import java .awt .datatransfer .ClipboardOwner ;
12+ import java .awt .datatransfer .DataFlavor ;
13+ import java .awt .datatransfer .Transferable ;
14+ import java .util .ArrayList ;
15+ import java .util .Date ;
16+ import java .util .List ;
17+
18+ /**
19+ * @ClassName: ClipboardHistoryToolService
20+ * @Description: 剪贴板历史工具
21+ * @author: xufeng
22+ * @date: 2019/6/15 0015 18:36
23+ */
24+
25+ @ Getter
26+ @ Setter
27+ @ Slf4j
28+ public class ClipboardHistoryToolService {
29+ private ClipboardHistoryToolController clipboardHistoryToolController ;
30+
31+ public ClipboardHistoryToolService (ClipboardHistoryToolController clipboardHistoryToolController ) {
32+ this .clipboardHistoryToolController = clipboardHistoryToolController ;
33+ }
34+
35+ public static class ClipboardUtil implements ClipboardOwner {
36+ public final static ClipboardUtil clipboardUtil = new ClipboardUtil ();
37+ public static List <TextArea > textAreaList = new ArrayList <>();
38+
39+ private ClipboardUtil () {
40+
41+ }
42+
43+ @ Override
44+ public void lostOwnership (Clipboard clipboard , Transferable oldContents ) {
45+ // 如果不暂停一下,经常会抛出IllegalStateException
46+ // 猜测是操作系统正在使用系统剪切板,故暂时无法访问
47+ if (textAreaList .isEmpty ()) {
48+ return ;
49+ }
50+ try {
51+ Thread .sleep (10 );
52+ } catch (InterruptedException e ) {
53+ e .printStackTrace ();
54+ }
55+ Transferable contents = clipboard .getContents (null );
56+ // 判断剪贴板中的内容是否支持文本
57+ try {
58+ String text = null ;
59+ if (contents .isDataFlavorSupported (DataFlavor .stringFlavor )) {
60+ // 获取剪贴板中的文本内容
61+ text = (String ) contents .getTransferData (DataFlavor .stringFlavor );
62+ } else if (contents .isDataFlavorSupported (DataFlavor .imageFlavor )) {
63+ Object object = contents .getTransferData (DataFlavor .imageFlavor );
64+ text = object .toString ();
65+ } else if (contents .isDataFlavorSupported (DataFlavor .plainTextFlavor )) {
66+ Object object = contents .getTransferData (DataFlavor .plainTextFlavor );
67+ text = object .toString ();
68+ } else if (contents .isDataFlavorSupported (DataFlavor .javaFileListFlavor )) {
69+ Object object = contents .getTransferData (DataFlavor .javaFileListFlavor );
70+ text = object .toString ();
71+ } else if (contents .isDataFlavorSupported (DataFlavor .selectionHtmlFlavor )) {
72+ Object object = contents .getTransferData (DataFlavor .selectionHtmlFlavor );
73+ text = object .toString ();
74+ } else if (contents .isDataFlavorSupported (DataFlavor .fragmentHtmlFlavor )) {
75+ Object object = contents .getTransferData (DataFlavor .fragmentHtmlFlavor );
76+ text = object .toString ();
77+ } else if (contents .isDataFlavorSupported (DataFlavor .allHtmlFlavor )) {
78+ Object object = contents .getTransferData (DataFlavor .allHtmlFlavor );
79+ text = object .toString ();
80+ }
81+ for (TextArea textArea : textAreaList ) {
82+ textArea .appendText ("---------------------------------------\r \n " );
83+ textArea .appendText (DateUtil .formatDateTime (new Date ()) + "\r \n " );
84+ textArea .appendText (text + "\r \n \r \n " );
85+ }
86+ } catch (Exception e ) {
87+ log .error ("获取剪贴板内容失败" , e );
88+ }
89+ clipboard .setContents (contents , this );
90+ }
91+ }
92+ }
0 commit comments