Swing GUI案例 - 3.程序组织
学着写Swing程序也有一段时间了,总是感觉程序不够清晰,最近几个月,对这个案例程序做了反复重构,有了一些体会。
应用简述:实现如下界面,并提供相关的录入、查询、修改和删除等功能。
参见:Swing GUI案例 - 2.需求说明
我摸索的程序组织原则如下:
1、容易找到程序的入口java程序,该java程序非常精炼;
2、容易找到各个可视控件(视图)的java展示代码;
3、容易找到各个可视控件触发的事件的处理代码;
4、数据结构(模型)和数据展示(视图)分离;
5、数据结构由业务模型决定,数据展示(视图)充分体现数据结构
为实现上述5个原则,可以总结4个技巧:
1、按照业务模型设计数据结构(model),单独形成java文件;
2、根据对数据结构的展示要求设计视图(view),视图中的需要动态填入内容的控件全部声明为public final字段,并在构造函数中初始化为缺省值,视图中仅包括数据展示(设计swing构建的model,如ListModel、TableModel 等),以及页面布局,不包含任何数据操作;
3、如果视图较为复杂,则按照视图界面进行分解,经过努力,上图主界面及相关编辑界面的视图转化为7-8个独立的java文件,每个文件都在200行以下;
4、按照层次结构组织视图,入口程序构造主界面和总的事件响应器,主界面按照展示层次依次构造各个可视部件,总的事件响应器构造适应各个界面的事件响应器
本着上述方法,我的程序组织如下:
1、rec_def.java用以表示关联文件,字段包括:
任务编号
登记日期
事件日期
事件描述
文件名等
2、task_def.java用以表示任务,字段包括:
任务编号
任务描述
任务中包括的关联文件记录(List<rec_def>)
3、task_table.java用以展示任务;
4、rec_table.java用以展示记录;
5、edit_view.java用以展示包含task_table、rec_table在内的编辑面板
6、edit_act.java用以实现edit_view中各控件触发事件的处理
……其他的view、act以及配置文件等的定义
99、taskman.java,包含List<task_def>、edit_view、edit_act等。