基于 JavaSwing 的招生信息管理系统的实现

背景

昨天实现了一个基于 Java Swing 的招生信息管理系统,这个比以前做的复杂一点,它包含两个管理功能,通过菜单切换。每个功能都有增、删、改、查,数据使用文件保存到磁盘中,可在此基础上添加或修改为任意新信息的管理功能。

本文来介绍一下这个简单系统的结构和实现要点,这是运行效果图

功能介绍

作为 Java Swing 学习的练习题,它包含的功能有用户注册、登录;学校招生项目信息管理菜单:增、删、改、查;用户预约报班信息管理菜单:增、删、改、查。

第一步,绘制功能结构图:
在这里插入图片描述
第二,系统登录后的主页面,包含两个一级菜单。
在这里插入图片描述
第三,主菜单包括“系统功能” 和“关于”。“系统功能” 对应两个子管理功能,点击菜单时跳到对应 List 的 Frame 窗体,列表窗体都含包添加、删除、修改按钮。“关于” 菜单,点击“退出”可结束程序。
在这里插入图片描述
培训项目信息录入界面:
在这里插入图片描述

类图结构

Swing 实现简单的信息管理功能,包括增、删、改、查、列表、数据信息操作类,PrjectListFrame 和 ClassOrderListFrame 所关联的功能类是一套类似。
所以对整个系统抽取的功能类图结构如下:
在这里插入图片描述

JComboBox 使用坑点

使用 Swing 绘制页面的时候,发现 Box 是非常好用的容器组件。信息输入框一般是 label 和文本域,创建一个水平 Box 加入两个组件即可:

JLabel titleLabel=new JLabel("项目名称:");
Box titleRow= Box.createHorizontalBox();
titleRow.add(titleLabel);
titleRow.add(titleJText);

本文的应用实现过程中,用到了 JComboBox ,因为课程预约的项目名称必须是系统录入的项目名称。需要先查询所有的项目,然后填充到 JComboBox 中,让用户选择,不用文本域,以避免无效数据的产生。

此时,如果还是直接添加到 Box 中的话,布局就会很难看:

        JLabel isChoosenLabel=new JLabel("是否招满:");
		jcomb.addItem("否");
		jcomb.addItem("是");
		jcomb.setPreferredSize(new Dimension(333, 20));
		jp.add(isChoosenLabel);
		jp.add(jcomb);
		Box isChoosenBox= Box.createHorizontalBox();
		isChoosenBox.add(isChoosenLabel);
		isChoosenBox.add(jcomb);

直接添加下拉框到 Box 的运行效果图:
在这里插入图片描述
这样将下拉框放在 Box 中,下拉框的大小是无法控制。

解决方案:查找了一些资料,最终找到的解决方案是,将 JComboBox 放在 JPanel 中,同时设置它的最佳 Size 。

这样才能让这一项跟前面对齐,修正添加下拉框的代码:

        JPanel jp=new JPanel();
		JLabel isChoosenLabel=new JLabel("是否招满:");
		jcomb.addItem("否");
		jcomb.addItem("是");
		jcomb.setPreferredSize(new Dimension(333, 20));
		jp.add(isChoosenLabel);
		jp.add(jcomb);
		Box isChoosenBox= Box.createHorizontalBox();
		isChoosenBox.add(jp);

jcomb.setPreferredSize(new Dimension(333, 20)) 这是关键代码,它可以调整距离 Label 的位置,再运行界面就齐整了:
在这里插入图片描述

进一步优化: 测试发现 JComboBox 所在父组件 JPanel 如果不设置大小,那么它与底部按钮的距离会很高,导致界面不匀称。
在这里插入图片描述
而且 JPanel 的 setSize 根本不生效 ,只有 jp.setMaximumSize(new Dimension(700, 30)); 才能控制面板的大小。

编程启示录

对大多数读者来说,本文只有一个有价值的信息,就是 JComboBox 怎么和 Box 一起创建一行大小适中的表单界面可点击查看运行效果

核心代码就是这两行:

jp.setMaximumSize(new Dimension(700, 30)); // 控制面板大小
jcomb.setPreferredSize(new Dimension(333, 20)); // 控制下拉框大小

猜你喜欢

转载自blog.csdn.net/wojiushiwo945you/article/details/106955176
今日推荐