J2SE+swing客户端开发进阶总结

2024-05-27 08:12

本文主要是介绍J2SE+swing客户端开发进阶总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hello , 我是恒。分享一个练手项目一本糊涂账,顺便帮站长宣传一下站点https://how2j.cn
本项目是基于Swing和JDBC开发的图形界面桌面应用,通过这个项目能运用锻炼J2SE知识和技能

结构

├───src/
│   ├───HutuMainFrame.java
│   ├───dao/
│   │   ├───CategoryDAO.java
│   │   ├───ConfigDAO.java
│   │   ├───RecordDAO.java
│   ├───entity/
│   │   ├───Category.java
│   │   ├───Config.java
│   │   ├───Record.java
│   ├───gui/
│   │   ├───frame/
│   │   │   ├───MainFrame.java
│   │   ├───listener/
│   │   │   ├───BackupListener.java
│   │   │   ├───CategoryListener.java
│   │   │   ├───ConfigListener.java
│   │   │   ├───RecordListener.java
│   │   │   ├───RecoverListener.java
│   │   │   ├───ToolBarListener.java
│   │   ├───model/
│   │   │   ├───CategoryComboBoxModel.java
│   │   │   ├───CategoryTableModel.java
│   │   ├───page/
│   │   │   ├───SpendPage.java
│   │   ├───panel/
│   │   │   ├───BackupPanel.java
│   │   │   ├───CategoryPanel.java
│   │   │   ├───ConfigPanel.java
│   │   │   ├───MainPanel.java
│   │   │   ├───RecordPanel.java
│   │   │   ├───RecoverPanel.java
│   │   │   ├───ReportPanel.java
│   │   │   ├───SpendPanel.java
│   │   │   ├───WorkingPanel.java
│   ├───service/
│   │   ├───CategoryService.java
│   │   ├───ConfigService.java
│   │   ├───RecordService.java
│   │   ├───ReportService.java
│   │   ├───SpendService.java
│   ├───startup/
│   │   ├───Bootstrap.java
│   ├───test/
│   │   ├───Test.java
│   ├───util/
│   │   ├───CenterPanel.java
│   │   ├───ChartUtil.java
│   │   ├───CircleProgressBar.java
│   │   ├───ColorUtil.java
│   │   ├───DateUtil.java
│   │   ├───DBUtil.java
│   │   ├───GUIUtil.java
│   │   ├───MysqlUtil.java

学习点

单例模式

SpendPanel类的实例通过instance变量来访问,使得监听器通过单例模式的面板访问组件

package gui.panel;import javax.swing.JLabel;public class SpendPanel {public static SpendPanel instance = new SpendPanel();JLabel lMonthSpend = new JLabel("本月消费");JLabel lTodaySpend = new JLabel("今日消费");/* .....*/private SpendPanel(){}
}

面板类与监听器类松耦合

GUI进阶

界面包规范
MainFrame 主窗体类,规划在gui.frame包下
消费一览面板类,规划在gui.panel包下
RecordPanel 记一笔面板类,规划在gui.panel包下
ToolBarListener 工具条监听器类,规划在gui.listener包下
BackupListener 备份监听器类,规划在gui.listener包下
界面工具类
GUIUtil.java开发图形界面的过程中,减少代码复用,作为工具类
设置按钮图标

public static void setImageIcon(JButton b, String fileName, String tip) {ImageIcon i = new ImageIcon(new File(imageFolder, fileName).getAbsolutePath());b.setIcon(i);b.setPreferredSize(new Dimension(61, 81));b.setToolTipText(tip);b.setVerticalTextPosition(JButton.BOTTOM);b.setHorizontalTextPosition(JButton.CENTER);b.setText(tip);
}

checkNumber、checkZero和checkEmpty方法用于验证用户输入的有效性

public static boolean checkNumber(JTextField tf, String input) {// ...
}public static boolean checkZero(JTextField tf, String input) {// ...
}

表单生成

设计

实体类Entity

配置信息Config类与配置信息表 config相对应,还有消费分类Category和消费信息类Record

package entity;public class Config {public int id;public String key;public String value;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getKey() {return key;}public void setKey(String key) {this.key = key;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}}
业务类

ConfigService 设置业务类,这个类是监听器直接调用的类,然后再通过ConfigService去调用ConfigDAO

package service;import dao.ConfigDAO;
import entity.Config;public class ConfigService {public static final String budget = "budget";public static final String mysqlPath = "mysqlPath";public static final String default_budget = "500";static ConfigDAO dao= new ConfigDAO();static{init();}public static void init(){init(budget, default_budget);init(mysqlPath, "");}
数据库CURD以及备份还原

CURD
不多说
工具类 MysqlUtil的创建
备份方法backup()通过Runtime调用mysqldump.exe进行备份
恢复方法recover通过Runtime调用mysql.exe进行数据的还原

    public static void backup(String mysqlPath, String backupfile) throws IOException {String commandFormat = "\"%s/bin/mysqldump.exe\" -u%s -p%s   -hlocalhost   -P%d %s -r \"%s\"";String command = String.format(commandFormat, mysqlPath, DBUtil.loginName, DBUtil.password, DBUtil.port,DBUtil.database, backupfile);Runtime.getRuntime().exec(command);}public static void recover(String mysqlPath, String recoverfile) {try {String commandFormat = "\"%s/bin/mysql.exe\" -u%s -p%s   %s ";String command = String.format(commandFormat, mysqlPath, DBUtil.loginName, DBUtil.password,DBUtil.database);Process p = Runtime.getRuntime().exec(command);OutputStream out = p.getOutputStream();String inStr;StringBuffer sb = new StringBuffer("");String outStr;BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(recoverfile), "utf8"));while ((inStr = br.readLine()) != null) {sb.append(inStr + "\r\n");}outStr = sb.toString();OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");writer.write(outStr);writer.flush();out.close();br.close();writer.close();} catch (Exception e) {e.printStackTrace();}}

最后

最后我没有列出所有精髓所在,特别是架构上。
对于我来说,还是有很多值得学习的地方

这篇关于J2SE+swing客户端开发进阶总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006920

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec