需求
- 加入保存保存快捷键
ctrl+s
- 修改代码,支持多次保存
实现
加入保存快捷键
在ScreenShotWindow.java中加入快捷键变量声明:
第1步:
1 2
| public static final int SaveImage_HOT_KEY = 4;
|
第2步:
注册快捷键:
1 2 3
| JIntellitype.getInstance().registerHotKey(SaveImage_HOT_KEY, JIntellitype.MOD_CONTROL, (int) 'S');
|
第3步:编写事件监听逻辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() { @Override public void onHotKey(int markCode) { switch (markCode) { case SCREENSHOT_HOT_KEY :
if(tools!=null) { tools.setVisible(false); } try { createScreenCapture(); } catch (AWTException e) { e.printStackTrace(); } ScreenShotOCR.visiable();
break; case EXIT_KEY_MARK : System.exit(0); break; case EXIT_SCREENSHOT_HOT_KEY: ScreenShotWindow.this.setVisible(false); tools.setLocation(0, 0); break; case SaveImage_HOT_KEY: ScreenShotWindow.this.setVisible(false); tools.setLocation(0, 0); try { saveImage(); } catch (IOException e) { e.printStackTrace(); } break; } } });
|
关键代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| case SaveImage_HOT_KEY: ScreenShotWindow.this.setVisible(false); tools.setLocation(0, 0); try { saveImage(); } catch (IOException e) { e.printStackTrace(); } break;
|
这样就注册了保存快捷键了。接下来修改保存函数。
支持多次保存保存后不退出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| public void saveImage() throws IOException { JFileChooser jfc = new JFileChooser(); jfc.setDialogTitle("保存");
FileNameExtensionFilter filter = new FileNameExtensionFilter("PNG", "png"); jfc.setFileFilter(filter);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); String fileName = sdf.format(new Date()); File filePath = FileSystemView.getFileSystemView().getHomeDirectory(); File defaultFile = new File( filePath + File.separator + fileName + ".png"); jfc.setSelectedFile(defaultFile);
int flag = jfc.showSaveDialog(this); if (flag == JFileChooser.APPROVE_OPTION) { File file = jfc.getSelectedFile(); String path = file.getPath(); if (!(path.endsWith(".png") || path.endsWith(".PNG"))) { path += ".png"; }
ImageIO.write(saveImage, "png", new File(path)); } }
|
原先的代码中截图后就退出了,关键代码:System.exit(0);
把这一段话注释掉即可。
出现问题
无法使用ctrl+s快捷键,因为JIntellitype注册的是全局快捷键,在其他软件中按下ctrl+s
进行保存文档的时候,系统会误认为是调用了保存图片。这样是不对的。这里解决方法是吧保存图片快捷键改成ctrl+alt+s
。局部快捷键怎么设置为还不知道。先别管他,能用就行了,我先去学点其他东西。