你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

IDEA 防沉迷插件

[复制链接]
gaosmile 发布时间:2021-1-26 10:14
温馨提示:本文由英文翻译而来,可能个别语句比较生硬,或者存在不恰当之处,建议英文好的小伙伴们去“阅读原文”。
& x3 x& E. M& s/ x* k4 R4 O
前 言
当初年少懵懂,那年夏天填志愿选专业,父母听其他长辈说选择计算机专业好。从那以后,我的身上就有了计院深深的烙印。从寝室到机房,从机房到图书馆,C、C++、Java、只要是想写点自己感兴趣的东西,一坐就是几个小时,但那时年轻,起身,收拾,一路小跑会女神,轻轻松松。现在工作了,毫无意外的做着开发的工作,长时间久坐。写代码一忙起来就忘了起来活动一下,也不怎么喝水。经常等到忙完了就感觉腰和腿不舒服。直到今年的体检报告一下来,才幡然醒悟:没有一个好身体,就不能好好打工,让老板过上他自己想要的生活了.
试过用手机提醒自己,但是没用。小米手环的久坐提醒功能也开着,有时候写代码正入神的,时间到了也就点一下就关了,还是没什么作用。所以我想究竟是我太赖了,还是用 IDEA 写代码容易沉迷,总之不可能是改需求有意思。所以元旦节打算为自己开发一款小小的 IDEA 防沉迷插件,我叫她【StopCoding】。她应该可以设置每隔多少分钟,就弹出一个提醒对话框,一旦对话框弹出来,IDEA 的代码编辑框就自动失去了焦点,什么都不能操作,到这还不算完,关键是这个对话框得关不了,并且还显示着休息倒计时,还有即使我修改了系统时间,这个倒计时也依然有效,除非我打开任务管理器,关闭 IDEA 的进程,然后再重新启动 IDEA。但是想一下想,IDEA 都都关了,还是休息一下吧。
下面就介绍一下她简单的使用教程和开发教程:
安装使用教程
安装
  • 在 IDEA 中直接搜索安装 StopCoding 插件(官方已经审核通过)
    ( }" k) E. j) J. N7 q# O1 s
微信图片_20210126095624.png
2. 内网开发的小伙伴 可以下载之后进行本地安装 下载地址
  • 本地安装:
    / o: A5 x" q7 O
微信图片_20210126095628.png
img
使用
  • Step1. 然后在菜单栏中 tools->StopCoding
    : _( C# G2 C1 ]3 U4 j0 x9 {( R" @* `
微信图片_20210126095632.png
img
  • Step2. 设置适合你的参数然后保存。" o5 Q  s- @: f% S+ M% j& l, V
微信图片_20210126095635.png 图片
  • Step3. 然后快乐的 Coding 吧,再不用担心自己会沉迷了。工作时间结束,她会弹出下框进行提醒,当然,这个框是关不掉的.只有你休息了足够的时间它才会自动关闭。
    8 t0 O5 `( {* Z0 a
微信图片_20210126095639.png 图片
- L' T- I7 o0 y& n  f
开发教程

' I/ j0 \3 J: x7 i7 I
这个插件非常的简约,界面操作也很简单。所使用的技术基本上都是 java 的基础编程知识。所以小伙伴感兴趣的话,一起看看吧。
技术范围
  • 插件工程的基本结构
  • Swing 主要负责两个对话框的交互
  • Timer 作为最基本的定时器选择9 l; e  Q5 f1 ?/ k$ L( N
插件工程结构 微信图片_20210126095643.png 图片
  • plugin.xml. S# |+ g3 @% o+ t
这是插件工程的核心配置文件,里面每一项的解释,可以参考第一篇的介绍核心配置文件说明。
  • data

  • 2 H! u- P5 A2 o) k
    % _& P3 A% S2 `; [
    • SettingData :配置信息对应 model
    • DataCenter :作为运行时的数据中心,都是些静态的全局变量: F/ ]* q' C0 o8 f% d3 R+ i) S
  • service

  • & C0 y9 |7 X0 j! N) j. X+ ?4 |

    ( ~6 E& M! K' q: m& G
    • TimerService :这个定时计算的核心代码
      ' Y3 k6 Q* I8 R6 O8 E- [9 g9 |
  • task
  • 8 W- |6 W8 k0 p
    9 r- o2 v+ |6 P  A: i0 b; X: R
    • RestTask :休息时的定时任务
    • WorkTask :工作时的定时任务
      7 o0 P- u' s! D( @4 t; L
  • ui
  • 6 ]) S+ ~* R# h* P& Q
    % d- a4 S1 D( A- [' k
    • SettingDialog :设置信息的对话框
    • TipsDialog : 休息时提醒的对话框
      : B) w; k! O" ~( [$ m  `
  • StopCodingSettingAction :启动入口的 action
    " K- K! _" N9 }8 t/ {$ {
Swing
其实在 IDEA 中开发 Swing 项目的界面非常简单。因为 IDEA 提供了一系列可视化的操作,以及控件布局的拖拽。接下来就简单的介绍一下对话框的创建过程和添加事件。
创建对话框
  • Step1- H$ O/ R# T. y
微信图片_20210126095647.png 图片
  • Step2
    # I4 ^9 N' Q; S1 n! x* H
微信图片_20210126095651.png 图片
  • Step3
    " J  a( a6 U7 m$ |" z
微信图片_20210126095655.png 图片
  • 注:这里并没有详细的展开 Swing 的讲解,因为界面的这个东西,需要大家多去自己实践。这里就不做手册式的赘述了。
    $ ~2 M9 _. h0 w! n
添加事件
其实,刚才创建的这个对话框里的两个按钮都是默认已经创建好了点击事件的。
public class TestDialog extends JDialog {
' u9 ?& C7 m8 e. a, s4 L- l! y    private JPanel contentPane;
3 ^7 J& Q( R: M/ I    private JButton buttonOK;
* v2 I' M& C5 q) G: @1 ]* u- y+ o    private JButton buttonCancel;
  V* N# S+ I6 q1 r% p* \
8 ~# w5 `$ Y  r  Z1 }6 ?$ z# d( F( I    public TestDialog() {3 Y* N- K  [/ v
        setContentPane(contentPane);
6 D5 _% q# }6 R( e# h, W" J" [% `        setModal(true);/ b7 ?( K1 r; t, b/ z
        getRootPane().setDefaultButton(buttonOK);
  T4 {, i7 _- V) K5 [" ]( i5 t) u' u' I- \8 k
        buttonOK.addActionListener(new ActionListener() {8 t4 T% U9 R0 H  J5 q
            public void actionPerformed(ActionEvent e) {
; B. C% t4 l. D6 h9 J$ _                onOK();4 R) {, n3 g( L
            }
9 `7 @& I* \* r, r$ `6 Y7 D' Z        }); //这是给OK按钮绑定点击事件的监听器1 c; v1 L) Z1 s3 p0 X
- H2 d# b$ a' r
        buttonCancel.addActionListener(new ActionListener() {" A$ V4 i6 N8 @: B) b
            public void actionPerformed(ActionEvent e) {
$ V* v- _% [! n, ]# X5 l                onCancel();
0 ]6 @' Y2 U9 K) p; p& z7 K$ k            }
& `- G+ k1 g; ?6 X, m& |        });//这是给取消按钮绑定点击事件的监听器
- v9 c. I1 a, {; Z$ p! M2 r2 n    //其他代码7 ~- Z2 h- U- X# Y/ B/ ?
    }
- m# h2 ]* k" K3 d/ A9 a
当然我们也可以其它任何控件去创建不同的事件监听器。这里可以通过界面操作创建很多种监听器,只要你需要,就可以使用。
  • step13 E/ L9 K) V) ^3 g) v# k0 B0 m- s
微信图片_20210126095702.png 图片
  • step2- E! f6 p+ b4 b$ x+ o: n
微信图片_20210126095714.png 图片Timer 定时器
在这个插件里面,需要用到定时的功能,同时去计算公国和休息的时间。所以使用 JDK 自带的 Timer,非常的方便。下面我 Timer 的常用的 api 放在这里,就清楚它的使用了。
  • 构造方法
    + h! v# b. r$ L& k8 R; h. D6 W4 _% Y
微信图片_20210126095718.png
img
  • 成员防范
    3 c/ W. K& x' R1 A0 b* A6 k0 E
微信图片_20210126095725.png
img
  • 主要是 schedule 去添加一个定时任务,和使用 cancel 去取消任务停止定时器。
    * P( B& z1 O  |. H
最后
相信有了这些基本介绍,感谢兴趣的小伙伴可以去看看源码,并尝试自己写一个小插件应该没什么大问题了。希望这篇文章对你有一点点启发,同时也希望这个插件能帮到作为程序员的你。
2 P$ {4 d; C8 W
赞 收藏 评论0 发布时间:2021-1-26 10:14

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版