自制Java工具:Ctrl+C+C快速翻译鼠标选中文本指南
2025.09.19 13:12浏览量:1简介:本文介绍如何使用Java开发一个实用工具,通过自定义快捷键Ctrl+C+C实现鼠标选中文本的即时翻译功能,提升跨语言工作效率。
自制Java工具:Ctrl+C+C快速翻译鼠标选中文本指南
引言
在全球化办公场景中,跨语言文本处理已成为高频需求。传统翻译方式需手动复制文本、切换翻译软件、粘贴内容,操作繁琐且效率低下。本文将介绍如何通过Java开发一个轻量级工具,实现通过自定义快捷键Ctrl+C+C快速翻译鼠标选中文本的功能,显著提升跨语言工作效率。
需求分析与设计目标
核心功能需求
- 实时文本捕获:当用户用鼠标选中任意窗口的文本时,工具需立即获取选中的内容。
- 快捷键触发:通过自定义快捷键Ctrl+C+C(区别于系统默认的Ctrl+C)触发翻译流程。
- 翻译服务集成:调用在线翻译API(如Google Translate、DeepL等)获取翻译结果。
- 结果展示:以弹窗或悬浮窗形式显示翻译结果,支持复制到剪贴板。
设计目标
- 轻量化:工具应独立运行,不依赖浏览器或其他软件。
- 低延迟:从文本捕获到翻译结果展示的响应时间应控制在1秒内。
- 跨平台:支持Windows、macOS和Linux系统。
- 可扩展性:支持添加更多翻译服务或自定义快捷键。
技术实现方案
1. 文本捕获实现
Java本身不直接支持全局文本捕获,但可通过以下方式实现:
- Windows平台:使用JNA(Java Native Access)调用Windows API
GetForegroundWindow和GetWindowText获取活动窗口标题,再通过SendInput模拟Ctrl+C复制选中内容。 - 跨平台方案:使用Robot类模拟键盘操作(Ctrl+C),但需确保目标窗口处于活动状态。
代码示例(Windows文本捕获):
import com.sun.jna.platform.win32.*;public class TextCapture {public static String getSelectedText() {try {// 模拟Ctrl+C操作Robot robot = new Robot();robot.keyPress(KeyEvent.VK_CONTROL);robot.keyPress(KeyEvent.VK_C);robot.keyRelease(KeyEvent.VK_C);robot.keyRelease(KeyEvent.VK_CONTROL);// 从剪贴板获取文本Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();return (String) clipboard.getData(DataFlavor.stringFlavor);} catch (Exception e) {e.printStackTrace();return null;}}}
2. 快捷键监听
使用Java的GlobalScreen库(需安装JIntellitype或JNativeHook)监听全局快捷键:
import org.jnativehook.GlobalScreen;import org.jnativehook.NativeHookException;import org.jnativehook.keyboard.NativeKeyEvent;import org.jnativehook.keyboard.NativeKeyListener;public class HotkeyListener implements NativeKeyListener {private boolean isCtrlPressed = false;@Overridepublic void nativeKeyPressed(NativeKeyEvent e) {if (e.getKeyCode() == NativeKeyEvent.VC_CONTROL) {isCtrlPressed = true;} else if (isCtrlPressed && e.getKeyCode() == NativeKeyEvent.VC_C) {// 第二次Ctrl+C触发翻译String text = TextCapture.getSelectedText();if (text != null) {String translated = Translator.translate(text, "en", "zh");Notification.show(translated);}isCtrlPressed = false;}}@Overridepublic void nativeKeyReleased(NativeKeyEvent e) {if (e.getKeyCode() == NativeKeyEvent.VC_CONTROL) {isCtrlPressed = false;}}}
3. 翻译服务集成
以Google Translate API为例(需申请API Key):
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;public class Translator {private static final String API_KEY = "YOUR_API_KEY";private static final String URL = "https://translation.googleapis.com/language/translate/v2";public static String translate(String text, String sourceLang, String targetLang) {String requestBody = String.format("{\"q\":\"%s\",\"source\":\"%s\",\"target\":\"%s\",\"key\":\"%s\"}",text, sourceLang, targetLang, API_KEY);HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder().uri(URI.create(URL)).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString(requestBody)).build();try {HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());// 解析JSON获取翻译结果(此处简化,实际需用JSON库)return response.body().split("\"translatedText\":\"")[1].split("\"")[0];} catch (Exception e) {e.printStackTrace();return "翻译失败";}}}
4. 结果展示
使用Java Swing创建悬浮窗:
import javax.swing.*;import java.awt.*;public class Notification {public static void show(String text) {JFrame frame = new JFrame();frame.setUndecorated(true);frame.setAlwaysOnTop(true);frame.setType(Window.Type.POPUP);frame.setBackground(new Color(0, 0, 0, 0));JLabel label = new JLabel(text);label.setFont(new Font("微软雅黑", Font.PLAIN, 16));frame.add(label);frame.pack();frame.setLocationRelativeTo(null);frame.setVisible(true);// 3秒后自动关闭new Timer(3000, e -> frame.dispose()).start();}}
完整工具集成
将上述模块整合到主类中:
public class TranslationTool {public static void main(String[] args) {try {GlobalScreen.registerNativeHook();} catch (NativeHookException ex) {System.err.println("无法注册全局快捷键监听");System.exit(1);}GlobalScreen.addNativeKeyListener(new HotkeyListener());JOptionPane.showMessageDialog(null, "翻译工具已启动,按Ctrl+C+C翻译选中文本");}}
部署与优化建议
- 打包为可执行文件:使用Launch4j或jpackage将工具打包为.exe或.app文件,方便分发。
- 配置文件管理:将API Key、目标语言等参数存储在配置文件中,避免硬编码。
- 错误处理:添加网络异常、API限制等场景的容错机制。
- 性能优化:
- 使用线程池处理翻译请求,避免阻塞UI。
- 添加缓存机制,减少重复翻译。
- 扩展功能:
- 支持OCR识别图片中的文字。
- 添加语音朗读功能。
实际应用场景
- 技术文档阅读:快速翻译英文技术文档中的关键段落。
- 跨团队协作:与海外团队沟通时即时翻译聊天内容。
- 学习辅助:阅读外文资料时快速理解难点。
- 客户支持:为国际客户提供多语言支持。
总结
本文详细介绍了如何使用Java开发一个通过Ctrl+C+C快捷键翻译鼠标选中文本的工具。通过结合全局快捷键监听、剪贴板操作和在线翻译API,实现了高效、便捷的跨语言文本处理方案。该工具具有轻量化、低延迟和跨平台的特点,可显著提升跨语言工作效率。开发者可根据实际需求进一步扩展功能,如添加更多翻译服务、支持OCR识别等。

发表评论
登录后可评论,请前往 登录 或 注册