骚操作,IDEA防止写代码沉迷插件 !

当初年少懵懂,那年夏天填志愿选专业,父母听其他长辈说选择计算机专业好。从那以后,我的身上就有了计院深深的烙印。从寝室到机房,从机房到图书馆,C、C++、Java、只要是想写点自己感兴趣的东西,一坐就是几个小时,但那时年轻,起身,收拾,一路小跑会女神,轻轻松松。

现在工作了,毫无意外的做着开发的工作,长时间久坐。写代码一忙起来就忘了起来活动一下,也不怎么喝水。经常等到忙完了就感觉腰和腿不舒服。直到今年的体检报告一下来,才幡然醒悟:没有一个好身体,就不能好好打工,让老板过上他自己想要的生活了.

试过用手机提醒自己,但是没用。小米手环的久坐提醒功能也开着,有时候写代码正入神的,时间到了也就点一下就关了,还是没什么作用。所以我想究竟是我太赖了,还是用 IDEA 写代码容易沉迷,总之不可能是改需求有意思。所以元旦节打算为自己开发一款小小的 IDEA 防沉迷插件,我叫她【StopCoding】。

她应该可以设置每隔多少分钟,就弹出一个提醒对话框,一旦对话框弹出来,IDEA 的代码编辑框就自动失去了焦点,什么都不能操作,到这还不算完,关键是这个对话框得关不了,并且还显示着休息倒计时,还有即使我修改了系统时间,这个倒计时也依然有效,除非我打开任务管理器,关闭 IDEA 的进程,然后再重新启动 IDEA。但是想一下想,IDEA 都都关了,还是休息一下吧。

那么接下来就来介绍一下她的安装和使用吧。

安装和使用教程

安装方式 1

  1. 在线安装:在 IDEA 插件市场中直接搜索安装 StopCoding 插件(官方已经审核通过),如下图所示:

安装方式 2

2. 如果是内网开发的小伙伴,可以使用离线安装。

先下载安装包,下载地址:https://github.com/jogeen/StopCoding/releases/tag/20210114-V1.2

再进行本地安装:

使用

  • Step1. 然后在菜单栏中 tools->StopCoding


  • Step2. 设置适合你的参数然后保存。


  • Step3. 然后快乐的 Coding 吧,再不用担心自己会沉迷了。工作时间结束,她会弹出下框进行提醒,当然,这个框是关不掉的.只有你休息了足够的时间它才会自动关闭.

通过以上步骤之后,就可以愉快的进行使用了。

自己手撸一个

以上的插件非常的简约,界面操作也很简单,所使用的技术基本上都是 Java 的基础编程知识,所以接下来就带领小伙伴一起来手撸一个插件玩玩。

技术范围

  • 插件工程的基本结构

  • Swing 主要负责两个对话框的交互

  • Timer 作为最基本的定时器选择

插件工程结构


  • plugin.xml

这是插件工程的核心配置文件,里面每一项的解释,可以参考第一篇的介绍核心配置文件说明。

  • data

    • SettingData :配置信息对应 model

    • DataCenter :作为运行时的数据中心,都是些静态的全局变量

  • service

    • TimerService :这个定时计算的核心代码

  • task

    • RestTask :休息时的定时任务

    • WorkTask :工作时的定时任务

  • ui

    • SettingDialog :设置信息的对话框

    • TipsDialog : 休息时提醒的对话框

  • StopCodingSettingAction :启动入口的 action

Swing

其实在 IDEA 中开发 Swing 项目的界面非常简单。因为 IDEA 提供了一系列可视化的操作,以及控件布局的拖拽。接下来就简单的介绍一下对话框的创建过程和添加事件。

创建对话框

  • Step1


  • Step2


  • Step3


  • 注:这里并没有详细的展开 Swing 的讲解,因为界面的这个东西,需要大家多去自己实践。这里就不做手册式的赘述了。

添加事件

其实,刚才创建的这个对话框里的两个按钮都是默认已经创建好了点击事件的。

public class TestDialog extends JDialog {private JPanel contentPane;private JButton buttonOK;private JButton buttonCancel;public TestDialog() {setContentPane(contentPane);setModal(true);getRootPane().setDefaultButton(buttonOK);buttonOK.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {onOK();}}); //这是给OK按钮绑定点击事件的监听器buttonCancel.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {onCancel();}});//这是给取消按钮绑定点击事件的监听器//其他代码}

当然我们也可以其它任何控件去创建不同的事件监听器。这里可以通过界面操作创建很多种监听器,只要你需要,就可以使用。

  • step1


  • step2


Timer 定时器

在这个插件里面,需要用到定时的功能,同时去计算公国和休息的时间。所以使用 JDK 自带的 Timer,非常的方便。下面我 Timer 的常用的 api 放在这里,就清楚它的使用了。

  • 构造方法

img

  • 成员防范


  • 主要是 schedule 去添加一个定时任务,和使用 cancel 去取消任务停止定时器。

最后

相信有了这些基本介绍,感谢兴趣的小伙伴想去看看源码和尝试自己写一个小插件就没什么大问题了。不说了,我得休息了。希望这个插件能帮到作为程序员得你,和这篇文章对你有一点点启发。当然麻烦小伙伴点个赞,鼓励一下打工人。

源码地址:https://github.com/jogeen/StopCoding


往期推荐

IDEA 不为人知的 5 个骚技巧!真香!


安利一个IDEA骚操作:一键生成方法的序列图


免费领取 IDEA激活码的6种方法!


关注我,每天陪你进步一点点!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mcq 队列_MCQ | 基础知识 免费和开源软件| 套装3

mcq 队列Q1. What do you understand from GNOME and KDE? Q1。 您从GNOME和KDE了解到什么? Linux Distribution Linux发行版 Command Lines 指令行 GUI Based Linux 基于GUI的Linux File Framework 文件框架 Answer: c. GUI Based Linux 答: c。 基于…

css属性 content

对css一直没有很系统得学习过,练习得也不是很多,纯小白.今天在写一个页面的时候,遇到一个问题,就是如何让外面的盒子适应里面的盒子大小,完美地把小盒子包在里面. 由于里面是一个列表 ul,为了让元素横排,我使用了float:right这个属性,所以列表悬浮了.如图: 其实当然可以直接给外…

js时间延迟执行函数

setTimeout(yourFunction(),5000); 5秒后执行yourFunction(),只执行一次 var tsetTimeout("javascript语句",毫秒) clearTimeout(t); 取消setTimeout() setInterval(yourFunction(),5000); 每隔5秒执行一次 如果在yourFunction()中再次调用了setTimeo…

一文汇总 JDK 5 到 JDK 15 中的牛逼功能!

前言JDK 16 马上就要发布啦(预计 2021.3.16 日发布),所以在发布之前,让我们先来回顾一下 JDK 5-15 的新特性吧,大家一起学起来~Java 5 新特性1. 泛型泛型本质是参数化类型,解决不确定具体对象类型的问题。L…

Tomcat 6.0 简介

本片翻译来自:http://tomcat.apache.org/tomcat-6.0-doc/introduction.html 介绍 无论是开发者还是tomcat管理员在使用前都需要了解一些必要的信息,本篇简单的介绍tomcat中的一些术语和概念。比如context是web应用的意思。CATALINA_HOME 在文档中&#x…

JavaScript编写了一个计时器

初学JavaScript,用JavaScript编写了一个计时器。 设计思想: 1、借助于Date()对象,来不断获取时间点; 2、然后用两次时间点的毫秒数相减,算出时间差; 3、累加时间差,这样就能把计时精确。 ps…

Docker部署SpringBoot的两种方法,后一种一键部署超好用!

作者 | LemonSquash来源 | cnblogs.com/npeng/p/14267007.html1.手工方式1.1.准备Springboot jar项目将项目打包成jar1.2.编写DockerfileFROM java:8 VOLUME /tmp ADD elk-web-1.0-SNAPSHOT.jar elk.jar EXPOSE 8080 ENTRYPOINT ["java","-Djava.security.egdfi…

用JavaScript将字符串中的单词大写

String in JavaScript is a sequence of characters. And capitalizing characters of words in a JavaScript string will change each character of the string with the capital letter of it. JavaScript中的字符串是字符序列。 而将JavaScript字符串中的单词大写会更改字…

UISwitch 添加 标签

给UISwitch添加一个标签。左右滑动时候出现开关标签内容。 代码: // // UISwitchJGLabel.h // JGSwitch // // Created by sl on 15/4/11. // Copyright (c) 2015年 Madordie. All rights reserved. // // // 说明: // 1.给UISwitch添加开关标…

爱了!蚂蚁开源的“SpringBoot”框架,新增了这6项功能...

SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boo…

JS关键字和保留字汇总

转载:http://www.itxueyuan.org/view/6627.htmlECMA-262 描述了一组具有特定用途的关键字。这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符。以下就是ECMAScri…

PUC的完整形式是什么?

PUC:大学预科/污染控制/个人解锁码 (PUC: Pre University Course / Pollution Under Control / Personal Unlock Code) 1)PUC:大学预科课程 (1) PUC: Pre University Course) PUC is an abbreviation of the Pre University Course. It alludes to an in…

Sizzle.selectors.match/leftMatch

对象Sizzle.selectors.match/leftMatch中存放了表达式类型和正则的映射,正则用于确定块表达式的类型,并解析其中的参数。 相关代码如下: var Expr Sizzle.selectors {match : {ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.))/,CLASS: /\.((?:[\w\u…

过滤器VS拦截器的4个区别,看完豁然开朗!

Spring的拦截器与Servlet的Filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等。但它们之间又有很大区别,所以本文磊哥就带大家全面了解一下什么是过滤器?什么是拦截器?以及二者有什么区别…

js 自己试验 创建对象例子

js 创建对象例子 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script>function login() {alert(this.username " - login");}function CreateUser(username, password) { // var us…

云计算应用迁移_应用迁移策略到云

云计算应用迁移Rehost: 重新托管&#xff1a; Rehosting an application to the cloud without making changes to its architecture or code. 将应用程序重新托管到云&#xff0c;而无需更改其架构或代码。 Refactor: 重构&#xff1a; Involves application code and conf…

看美文,记单词(6)

combat vt.反对&#xff0c;与..战斗 vi.战斗&#xff0c;搏斗 n. 战争&#xff0c;争论 adj. 战斗的.. intensify vi. 增强&#xff0c;强化 vt. 使加强&#xff0c;使强化 detention n. 拘留&#xff0c;挽留&#xff0c;延迟 administrative detention 行政…

分布式ID生成的9种方法,特好用!

前言业务量小于500W或数据容量小于2G的时候单独一个mysql即可提供服务&#xff0c;再大点的时候就进行读写分离也可以应付过来。但当主从同步也扛不住的是就需要分表分库了&#xff0c;但分库分表后需要有一个唯一ID来标识一条数据&#xff0c;数据库的自增ID显然不能满足需求&…

js对象的定义方法

转载&#xff1a;http://blog.sina.com.cn/s/blog_60f632050100wz7h.html &#xff08;1&#xff09;基于已有对象的扩充方法&#xff1a;适用于临时构建对象&#xff0c;弊端&#xff1a;每次构建对象都要新建一个。 var objectnew Object();object.name"Tom";objec…

8051 管脚定义_8051微控制器的引脚说明

8051 管脚定义8051微控制器的引脚说明 (Pin Description of 8051 Microcontroller) Pins from 1-8 1-8针 Port 1: The pins in this port are bi-directional and can be used for input and output. The pins are individually controlled; some are used for input while ot…