前言
本功能的实现基于这篇笔记 http://t.csdnimg.cn/1I8ln,本文阅读过程中有疑惑都可以查看此笔记
实现思路:检测到按压ctrl +c +c 后,获取当前剪切板文字,调用百度翻译api。
实现结果:
完整代码在最后
实现过程
1 监控ctrl +c +c
在当前demo的功能中我们可以看到,当按压键盘时会调用nativeKeyPressed
方法,并会打印当前按下的按钮字符串。
我们去掉一些打印的干扰:去除release和type的打印,以及press打印的前缀
此时就只会打印我们的按键
现在去实现:当连续按压ctrl+c+c时,打印"你按下了ctrl+c+c哦"
思路:初始设置一个key字符串为"“,当检测到按压ctrl时,设置key为"Ctrl”,当不是Ctrl时,key拼接本次按压的按键,然后和"CtrlCC"做比较。如果相同,则说明用户连续按压了ctrl+c+c;
代码实现(红框内为添加的代码):
效果:
2 获取剪切板内容
在我们进行ctrl+c+c的操作过程中,第一个ctrl+c就会将鼠标选择的内容放到剪切板里,此时我们获取剪切板的内容,之后再用这个内容调用翻译api即可。
创建一个剪切板工具类
/**
* 剪切板工具类
*/
public class ClipBoardUtil {
public static String getClipboardText() {
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
//从系统剪切板中获取数据
Transferable content = clipboard.getContents(null);
//判断是否为文本类型
if (content.isDataFlavorSupported(DataFlavor.stringFlavor)) {
//从数据中获取文本值
String text = null;
try {
text = (String) content.getTransferData(DataFlavor.stringFlavor);
} catch (Exception e) {
}
if (text == null) {
return "剪切板为空";
}
return text;
}
return "剪切板无文本值";
}
}
在代码中调用:
效果:
3 调用百度翻译api
注册账号,开通服务
搜索百度翻译开放平台,注册账号,实名认证后,可以申请高级版用户
标准版:注册,未实名
高级版:注册,实名
尊享版:企业认证
高级版每个月有100万字符的免费调用量,对于个人使用的话绰绰有余了。
注册后,在管理控制台中开通文本翻译服务
详细见文档:
根据文档,编写代码
其中appid和密钥,在我们的管理控制台中
以下是调用方法的代码实现,我们创建一个TransApi
类
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.http.HttpUtil;
import java.util.HashMap;
import java.util.Map;
public class TransApi {
private static final String TRANS_API_HOST = "http://api.fanyi.baidu.com/api/trans/vip/translate"<