Skip to content

Commit 4826465

Browse files
committed
添加剪贴板历史工具
1 parent 95be4b2 commit 4826465

10 files changed

Lines changed: 205 additions & 5 deletions

File tree

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
**xJavaFxTool交流QQ群:== [387473650](https://jq.qq.com/?_wv=1027&k=59UDEAD) ==**
99

10-
xJavaFxTool是使用javaFx开发的实用小工具集,目前项目刚刚建立,利用业余时间把工作中遇到的一些问题总结起来,打包进小工具集中,供大家参考和使用,里面包含了javaFx的一些功能的示例,如布局、国际化、第三方UI库([controlsfx](http://fxexperience.com/controlsfx/)[JFoenix](http://www.jfoenix.com/)等)、外部jar包加载(插件机制)等一些常用功能,想学习javaFx的同学可以参考参考,学习javaFx的资料参考[www.javafxchina.net](http://www.javafxchina.net/main/)
10+
xJavaFxTool是使用javaFx开发的实用小工具集,利用业余时间把工作中遇到的一些问题总结起来,打包进小工具集中,供大家参考和使用,里面包含了javaFx的一些功能的示例,如布局、国际化、第三方UI库([controlsfx](http://fxexperience.com/controlsfx/)[JFoenix](http://www.jfoenix.com/)等)、外部jar包加载(插件机制)等一些常用功能,想学习javaFx的同学可以参考参考,学习javaFx的资料参考[www.javafxchina.net](http://www.javafxchina.net/main/)
1111

1212
由于SpringBoot的火热,项目已经出SpringBoot-javafx版本,[xJavaFxTool-spring](https://gitee.com/xwintop/xJavaFxTool-spring) 欢迎参考,谢谢。
1313

@@ -139,6 +139,8 @@ Mac OS X x64 [xJavaFxTool-0.1.6-macosx-x64.pkg](https://dev.tencent.com/s/c5ffd1
139139

140140
48、RandomGeneratorTool:随机数生成工具;
141141

142+
49、ClipboardHistoryTool:剪贴板历史工具;
143+
142144
传输工具目前支持功能如下:
143145

144146
Receiver接收器:
@@ -197,6 +199,7 @@ Sender发送器:
197199
- 监控功能(文件夹深度、Ftp/Ftps/sftp文件数量、mq深度);
198200
- 转换excel为sql插入语句;
199201
- 记录键盘使用情况小工具;
202+
- 随机文件生成器(带模版引擎);
200203

201204
#### 项目结构
202205

src/main/java/com/xwintop/xJavaFxTool/controller/IndexController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.xwintop.xJavaFxTool.utils.JavaFxViewUtil;
88
import com.xwintop.xJavaFxTool.utils.XJavaFxSystemUtil;
99
import com.xwintop.xJavaFxTool.view.IndexView;
10+
import com.xwintop.xcore.util.HttpClientUtil;
1011
import com.xwintop.xcore.util.javafx.AlertUtil;
1112
import javafx.application.Platform;
1213
import javafx.beans.value.ChangeListener;
@@ -298,4 +299,9 @@ private void setLanguageAction(ActionEvent event) throws Exception {
298299
MenuItem menuItem = (MenuItem) event.getSource();
299300
indexService.setLanguageAction(menuItem.getText());
300301
}
302+
303+
@FXML
304+
private void xwintopLinkOnAction(ActionEvent event) throws Exception {
305+
HttpClientUtil.openBrowseURLThrowsException("https://gitee.com/xwintop/xJavaFxTool");
306+
}
301307
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.xwintop.xJavaFxTool.controller.developTools;
2+
3+
import com.xwintop.xJavaFxTool.services.developTools.ClipboardHistoryToolService;
4+
import com.xwintop.xJavaFxTool.view.developTools.ClipboardHistoryToolView;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import lombok.extern.slf4j.Slf4j;
8+
9+
import java.awt.*;
10+
import java.awt.datatransfer.Clipboard;
11+
import java.net.URL;
12+
import java.util.ResourceBundle;
13+
14+
/**
15+
* @ClassName: ClipboardHistoryToolController
16+
* @Description: 剪贴板历史工具
17+
* @author: xufeng
18+
* @date: 2019/6/15 0015 18:35
19+
*/
20+
21+
@Getter
22+
@Setter
23+
@Slf4j
24+
public class ClipboardHistoryToolController extends ClipboardHistoryToolView {
25+
private ClipboardHistoryToolService clipboardHistoryToolService = new ClipboardHistoryToolService(this);
26+
27+
@Override
28+
public void initialize(URL location, ResourceBundle resources) {
29+
initView();
30+
initEvent();
31+
initService();
32+
}
33+
34+
private void initView() {
35+
}
36+
37+
private void initEvent() {
38+
if (ClipboardHistoryToolService.ClipboardUtil.textAreaList.isEmpty()) {
39+
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
40+
clipboard.setContents(clipboard.getContents(null), ClipboardHistoryToolService.ClipboardUtil.clipboardUtil);
41+
}
42+
ClipboardHistoryToolService.ClipboardUtil.textAreaList.add(clipboardHistory);
43+
}
44+
45+
private void initService() {
46+
}
47+
48+
/**
49+
* 父控件被移除前调用
50+
*/
51+
public void onCloseRequest(Event event) {
52+
log.info("移除剪贴板历史监听");
53+
ClipboardHistoryToolService.ClipboardUtil.textAreaList.remove(clipboardHistory);
54+
}
55+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
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+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.xwintop.xJavaFxTool.view.developTools;
2+
3+
import javafx.fxml.FXML;
4+
import javafx.fxml.Initializable;
5+
import javafx.scene.control.TextArea;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
/**
10+
* @ClassName: ClipboardHistoryToolView
11+
* @Description: 剪贴板历史工具
12+
* @author: xufeng
13+
* @date: 2019/6/15 0015 18:35
14+
*/
15+
16+
@Getter
17+
@Setter
18+
public abstract class ClipboardHistoryToolView implements Initializable {
19+
@FXML
20+
protected TextArea clipboardHistory;
21+
22+
}

src/main/resources/com/xwintop/xJavaFxTool/fxmlView/Index.fxml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<?import javafx.geometry.Insets?>
44
<?import javafx.scene.control.Button?>
55
<?import javafx.scene.control.CheckBox?>
6+
<?import javafx.scene.control.Hyperlink?>
67
<?import javafx.scene.control.Menu?>
78
<?import javafx.scene.control.MenuBar?>
89
<?import javafx.scene.control.MenuItem?>
@@ -12,7 +13,7 @@
1213
<?import javafx.scene.layout.BorderPane?>
1314
<?import javafx.scene.layout.HBox?>
1415

15-
<AnchorPane prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.xwintop.xJavaFxTool.controller.IndexController">
16+
<AnchorPane prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.xwintop.xJavaFxTool.controller.IndexController">
1617
<children>
1718
<BorderPane layoutY="2.0" prefHeight="600.0" prefWidth="900.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="2.0">
1819
<top>
@@ -56,6 +57,7 @@
5657
</HBox.margin>
5758
</Button>
5859
<CheckBox fx:id="singleWindowBootCheckBox" mnemonicParsing="false" text="%singleWindowBootCheckBox" />
60+
<Hyperlink onAction="#xwintopLinkOnAction" text="gitee.com/xwintop/xJavaFxTool" />
5961
</children>
6062
</HBox>
6163
</top>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
4+
<?import javafx.geometry.Insets?>
5+
<?import javafx.scene.control.TextArea?>
6+
<?import javafx.scene.layout.VBox?>
7+
<VBox prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
8+
fx:controller="com.xwintop.xJavaFxTool.controller.developTools.ClipboardHistoryToolController">
9+
<padding>
10+
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
11+
</padding>
12+
<TextArea fx:id="clipboardHistory" prefHeight="200.0" prefWidth="200.0" promptText="剪贴历史" VBox.vgrow="ALWAYS"/>
13+
</VBox>

src/main/resources/config/toolFxmlLoaderConfiguration.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,11 @@
279279
<url>/com/xwintop/xJavaFxTool/fxmlView/codeTools/RandomGeneratorTool.fxml</url>
280280
<title>RandomGeneratorTool</title>
281281
<menuParentId>codeTools</menuParentId>
282+
</ToolFxmlLoaderConfiguration>
283+
<ToolFxmlLoaderConfiguration>
284+
<url>/com/xwintop/xJavaFxTool/fxmlView/developTools/ClipboardHistoryTool.fxml</url>
285+
<title>ClipboardHistoryTool</title>
286+
<menuParentId>developTools</menuParentId>
282287
<isDefaultShow></isDefaultShow>
283288
</ToolFxmlLoaderConfiguration>
284289

src/main/resources/locale/Menu.properties

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ SetLanguageText=\u8BED\u8A00\u9009\u62E9\u8BBE\u7F6E\u6210\u529F\uFF0C\u91CD\u54
2020

2121
selectTextField=\u8BF7\u8F93\u5165\u83DC\u5355\u540D
2222
selectButton=\u641C\u7D22
23-
singleWindowBootCheckBox=\u662F\u5426\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00
23+
singleWindowBootCheckBox=\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00
2424

2525
codeTools=Code\u5DE5\u5177
2626
debugTools=\u8C03\u8BD5\u5DE5\u5177
@@ -86,4 +86,5 @@ CharsetDetectTool=\u7F16\u7801\u68C0\u6D4B\u5DE5\u5177
8686
ScanPortTool=\u7AEF\u53E3\u626B\u63CF\u5DE5\u5177
8787
FileMergeTool=\u6587\u4EF6\u5408\u5E76\u5DE5\u5177
8888
SedentaryReminderTool=\u4E45\u5750\u63D0\u9192\u5DE5\u5177
89-
RandomGeneratorTool=\u968F\u673A\u6570\u751F\u6210\u5DE5\u5177
89+
RandomGeneratorTool=\u968F\u673A\u6570\u751F\u6210\u5DE5\u5177
90+
ClipboardHistoryTool=\u526A\u8D34\u677F\u5386\u53F2\u5DE5\u5177

src/main/resources/locale/Menu_en_US.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,5 @@ CharsetDetectTool=CharsetDetectTool
8686
ScanPortTool=ScanPortTool
8787
FileMergeTool=FileMergeTool
8888
SedentaryReminderTool=SedentaryReminderTool
89-
RandomGeneratorTool=RandomGeneratorTool
89+
RandomGeneratorTool=RandomGeneratorTool
90+
ClipboardHistoryTool=ClipboardHistoryTool

0 commit comments

Comments
 (0)