JavaSwing版完整截图小软件设计(二)

15 篇文章 1 订阅
11 篇文章 0 订阅

JavaSwing版完整截图小软件设计(二)

上一篇基础功能的实现请见:

https://blog.csdn.net/rico_zhou/article/details/80062882

screenshot2.0版本实现功能主要如下:

1.自定义保存图片路径

2.图片格式自定义

3.开机自启动,启动最小化

4.截图,退出快捷键不能与其他系统软件冲突,但是保存,复制,撤销,取消的快捷键支持任意快捷键

5.新增设置功能,截图带光标,显示放大镜,显示像素,添加文字,椭圆标注,马赛克功能,撤销功能,直线标注,圆形标注,圆角矩形标注,矩形标注,曲线标注,显示坐标轴等功能自定义

6.鼠标单击设置,双击设置

7.鼠标右键菜单

8.是否注册成Windows服务(暂未实现)

9.设置立即生效,不再需要重启

先上几张图

基础设置图

高级设置图

截图状态下图

右键菜单

贴出部分代码,源码请见github

初始化主题

// 初始化主题
	private void initTheme() {
		// 国人牛逼主题,值得学习
		// 初始化字体
		InitGlobalFont(new Font("微软雅黑", Font.PLAIN, 13));
		// 设置本属性将改变窗口边框样式定义
		// 系统默认样式 osLookAndFeelDecorated
		// 强立体半透明 translucencyAppleLike
		// 弱立体感半透明 translucencySmallShadow
		// 普通不透明 generalNoTranslucencyShadow
		BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.generalNoTranslucencyShadow;
		// 设置主题为BeautyEye
		try {
			org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 隐藏“设置”按钮
		UIManager.put("RootPane.setupButtonVisible", false);
		// 开启/关闭窗口在不活动时的半透明效果
		// 设置此开关量为false即表示关闭之,BeautyEye LNF中默认是true
		BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
		// 设置BeantuEye外观下JTabbedPane的左缩进
		// 改变InsetsUIResource参数的值即可实现
		UIManager.put("TabbedPane.tabAreaInsets", new javax.swing.plaf.InsetsUIResource(3, 20, 2, 20));
		//

		// 切换主题,此主题在圆形窗口有标题栏

		try {
			// UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

初始化其他

// 初始化,检查是否已启动,是否最小化托盘
	private void initFirst() {
		// 是否已启动,启动则退出
		if (!su.checkSocket(ssmm.getPort() != 0 ? ssmm.getPort() : 12345)) {
			// JOptionPane.showMessageDialog(null, "程序已启动!请勿重复启动!", "提示消息",
			// JOptionPane.WARNING_MESSAGE);
			System.exit(0);
		}

	}

	// 设置最小化
	public void setJFMinSize() {
		// 是否最小化托盘
		try {
			// 若不支持托盘或者初始化失败,则提示
			if (!minimizeTray()) {
				JOptionPane.showMessageDialog(null, "系统不支持托盘!", "提示消息", JOptionPane.WARNING_MESSAGE);
				return;
			}
			dispose();
		} catch (AWTException e1) {
			e1.printStackTrace();
		}
	}

	// 初始化配置
	public void initPro() {
		// 初始化按键对照表
		su.initKeyMap();
		// 原理:首先判断exe所在目录是否存在隐藏的配置文件screentshotsetup.properties,
		// 如果存在,则读取此配置文件,如果不存在则生成一个默认的隐藏的配置文件
		// 实例化一个参数对象
		// 这个是用于设置具体参数
		// sm = new SetupMsg();
		// 这个是用于显示具体参数
		sp = new SetupParams();
		File f = new File("screentshotsetup.properties");
		// 判断是否存在文件
		fileExit = su.isFileExit(f);
		if (fileExit) {
			// 获取默认配置信息
			try {
				// 获取显示参数
				sp = su.getDefaultMsg(f);
				// ScreenShotMainGUI.sspp = sp;
				// 转化为使用参数
				ssmm = su.trunSm(sp);
			} catch (Exception e1) {
				ssmm = new SetupMsg();
				e1.printStackTrace();
			}
		}
	}

热键监听

// 第二步:添加热键监听器
		JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() {
			public void onHotKey(int markCode) {
				switch (markCode) {
				case SSHOT_KEY_MARK:
					if (ScreenShotMainGUI.isOpenSetupJF == true) {
						// 设置界面打开时,禁止截图程序
						su.proKeyBeforeSshot(SSHOT_KEY_MARK, ssmm);
						return;
					}
					startScreenShot();
					break;
				case EXIT_KEY_MARK:
					if (ScreenShotMainGUI.isOpenSetupJF == true) {
						// 设置界面打开时,禁止截图程序
						su.proKeyBeforeSshot(EXIT_KEY_MARK, ssmm);
						return;
					}
					System.exit(0);
					break;
				case EXIT_CURR_KEY_MARK:
					if (ScreenShotMainGUI.isOpenSetupJF == true) {
						// 设置界面打开时,禁止截图程序
						su.proKeyBeforeSshot(EXIT_CURR_KEY_MARK, ssmm);
						return;
					}
					exitCurrScreenShot();
					break;
				case SAVE_KEY_MARK:
					if (ScreenShotMainGUI.isOpenSetupJF == true) {
						// 设置界面打开时,禁止截图程序
						su.proKeyBeforeSshot(SAVE_KEY_MARK, ssmm);
						return;
					}
					saveCurrSshot();
					break;
				case CUT_KEY_MARK:
					if (ScreenShotMainGUI.isOpenSetupJF == true) {
						// 设置界面打开时,禁止截图程序
						su.proKeyBeforeSshot(CUT_KEY_MARK, ssmm);
						return;
					}
					cutCurrSshot();
					break;
				case BACK_KEY_MARK:
					if (ScreenShotMainGUI.isOpenSetupJF == true) {
						// 设置界面打开时,禁止截图程序
						su.proKeyBeforeSshot(BACK_KEY_MARK, ssmm);
						return;
					}
					backSshot();
					break;
				}

其他代码请见源码github。

最后打包请见

https://blog.csdn.net/rico_zhou/article/details/79868129

精简jre请见

https://blog.csdn.net/rico_zhou/article/details/80255555

制作安装版exe请见

 

提示:

若启动错误显示端口被占用(默认12345),则修改设置文件,添加(修改)port=xxx,保存并启动

如需抗锯齿处理,请在所有画笔处设置

 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

源码GitHub:https://github.com/ricozhou/javascreenshot2.0

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值