主题:Swing 实现截图小软件 (六)
既然 sdtm1016 兄 给出新的建议,那我们就继续完善下 SnapShoot
按 sdtm1016 兄的需求,这次再增加三个功能:
1. 修改文件选择窗口的默认目录为系统桌面,且给定默认文件名。
2. 增加托盘功能,且程序运行时,不自动显示软件窗口。
3. 增加系统热键功能,即:不管程序当前有没有获得焦点,均可以保持键盘快捷键的监听,实现快捷功能。
功能一: 修改文件选择窗口的默认目录为系统桌面,且给定默认文件名。
对于在当前用户的系统桌面目录的取得,Java API 已经有提供了:
- //得到当前用户的桌面目录
- File desktopDir = FileSystemView.getFileSystemView().getHomeDirectory();
//得到当前用户的桌面目录 File desktopDir = FileSystemView.getFileSystemView().getHomeDirectory();
那么我们设定文件选择窗口的默认选中文件为 用户桌面目录下的 save.png :
- JFileChooser chooser = new JFileChooser();
- File selectedFile = new File(FileSystemView.getFileSystemView().getHomeDirectory(), "save.png");
- //设置默认选中文件
- chooser.setSelectedFile(selectedFile);
JFileChooser chooser = new JFileChooser(); File selectedFile = new File(FileSystemView.getFileSystemView().getHomeDirectory(), "save.png"); //设置默认选中文件 chooser.setSelectedFile(selectedFile);
功能一完成。
功能二:增加托盘功能,且程序运行时,不自动显示软件窗口。
在 JDK6.0 中,也提供了对系统托盘的操作。 本例关于加入系统托盘的代码:
- /**
- * 加入系统托盘
- */
- private void addSystemTray() {
- //修改窗口关闭和最小化事件
- this.addWindowListener(new WindowAdapter() {
- public void windowClosed(WindowEvent e) {
- SnapShoot.this.setVisible(false);
- }
- public void windowIconified(WindowEvent e) {
- SnapShoot.this.setVisible(false);
- }
- });
- if (SystemTray.isSupported()) {
- SystemTray tray = SystemTray.getSystemTray();
- // 为这个托盘加一个弹出菜单
- final PopupMenu popup = new PopupMenu();
- MenuItem item = new MenuItem("open ctrl + shift + o");
- MenuItem exit = new MenuItem("exit");
- popup.add(item);
- popup.add(exit);
- item.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- SnapShoot.this.setVisible(true);
- }
- });
- exit.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- //清除系统热键
- JIntellitype.getInstance().cleanUp();
- System.exit(1);
- }
- });
- // 为这个托盘加一个提示信息
- Image scaleLogo = ((BufferedImage)logo).getScaledInstance(16, 16, Image.SCALE_FAST);
- TrayIcon trayIcon = new TrayIcon(scaleLogo, "屏幕截图小软件: SnapShoot\n作者:pengranxiang", popup);
- try {
- tray.add(trayIcon);
- } catch (AWTException e) {
- System.err.println("无法向这个托盘添加新项: " + e);
- }
- } else {
- System.err.println("无法使用系统托盘!");
- }
- }