【小学期】静态页面设计——以学生管理系统为例

使用Swing设计学生管理系统的静态页面

我们将学习如何使用Java Swing来设计一个学生管理系统的静态页面。我们将创建一个主窗口,其中包含一些基本的组件,如标签、文本框、按钮和表格。

项目结构

首先,假设我们的项目目录结构如下:

student_management
│
├── src
│   ├── model
│   │   ├── Student.java
│   │   └── StudentDAO.java
│   │
│   ├── view
│   │   └── StudentView.java
│   │
│   ├── controller
│   │   └── StudentController.java
│   │
│   └── util
│       ├── DBUtil.java
│       ├── EncodingUtil.java
│       └── OtherUtil.java
│
└── resources└── database.properties

我们将主要关注view目录下的StudentView.java文件。

1. 创建StudentView类

创建StudentView.java文件,并编写以下代码:

package view;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;/*** 学生管理系统的主视图*/
public class StudentView extends JFrame {private JTextField idField;private JTextField nameField;private JTextField ageField;private JTextField gradeField;private JButton addButton;private JButton updateButton;private JButton deleteButton;private JButton viewButton;private JTable studentTable;public StudentView() {// 设置窗口标题setTitle("学生管理系统");// 设置窗口大小setSize(800, 600);// 设置窗口关闭操作setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗口居中setLocationRelativeTo(null);// 初始化组件initComponents();// 设置窗口可见setVisible(true);}/*** 初始化组件*/private void initComponents() {// 创建面板JPanel panel = new JPanel();panel.setLayout(new BorderLayout());// 创建顶部面板(表单区域)JPanel topPanel = new JPanel();topPanel.setLayout(new GridLayout(5, 2, 10, 10));// 添加表单组件topPanel.add(new JLabel("学号:"));idField = new JTextField();topPanel.add(idField);topPanel.add(new JLabel("姓名:"));nameField = new JTextField();topPanel.add(nameField);topPanel.add(new JLabel("年龄:"));ageField = new JTextField();topPanel.add(ageField);topPanel.add(new JLabel("年级:"));gradeField = new JTextField();topPanel.add(gradeField);// 创建按钮面板JPanel buttonPanel = new JPanel();buttonPanel.setLayout(new GridLayout(1, 4, 10, 10));// 添加按钮addButton = new JButton("添加");updateButton = new JButton("更新");deleteButton = new JButton("删除");viewButton = new JButton("查看");buttonPanel.add(addButton);buttonPanel.add(updateButton);buttonPanel.add(deleteButton);buttonPanel.add(viewButton);// 将按钮面板添加到顶部面板topPanel.add(buttonPanel);// 创建表格面板JPanel tablePanel = new JPanel();studentTable = new JTable();JScrollPane scrollPane = new JScrollPane(studentTable);tablePanel.setLayout(new BorderLayout());tablePanel.add(scrollPane, BorderLayout.CENTER);// 将顶部面板和表格面板添加到主面板panel.add(topPanel, BorderLayout.NORTH);panel.add(tablePanel, BorderLayout.CENTER);// 将主面板添加到窗口add(panel);}public static void main(String[] args) {// 显示主窗口SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {new StudentView();}});}
}

代码详解:

  1. 构造方法StudentView:设置窗口标题、大小、关闭操作、居中显示,并初始化组件。
  2. initComponents方法:初始化所有Swing组件,包括面板、标签、文本框、按钮和表格。
  3. main方法:使用SwingUtilities.invokeLater确保在事件调度线程上创建和显示GUI。
2. 添加事件监听器

接下来,我们为按钮添加简单的事件监听器。在实际应用中,这些监听器会调用控制器来处理逻辑。

private void initComponents() {// 创建面板JPanel panel = new JPanel();panel.setLayout(new BorderLayout());// 创建顶部面板(表单区域)JPanel topPanel = new JPanel();topPanel.setLayout(new GridLayout(5, 2, 10, 10));// 添加表单组件topPanel.add(new JLabel("学号:"));idField = new JTextField();topPanel.add(idField);topPanel.add(new JLabel("姓名:"));nameField = new JTextField();topPanel.add(nameField);topPanel.add(new JLabel("年龄:"));ageField = new JTextField();topPanel.add(ageField);topPanel.add(new JLabel("年级:"));gradeField = new JTextField();topPanel.add(gradeField);// 创建按钮面板JPanel buttonPanel = new JPanel();buttonPanel.setLayout(new GridLayout(1, 4, 10, 10));// 添加按钮addButton = new JButton("添加");updateButton = new JButton("更新");deleteButton = new JButton("删除");viewButton = new JButton("查看");buttonPanel.add(addButton);buttonPanel.add(updateButton);buttonPanel.add(deleteButton);buttonPanel.add(viewButton);// 添加事件监听器addButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 添加学生信息的逻辑JOptionPane.showMessageDialog(StudentView.this, "添加学生信息");}});updateButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 更新学生信息的逻辑JOptionPane.showMessageDialog(StudentView.this, "更新学生信息");}});deleteButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 删除学生信息的逻辑JOptionPane.showMessageDialog(StudentView.this, "删除学生信息");}});viewButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 查看学生信息的逻辑JOptionPane.showMessageDialog(StudentView.this, "查看学生信息");}});// 将按钮面板添加到顶部面板topPanel.add(buttonPanel);// 创建表格面板JPanel tablePanel = new JPanel();studentTable = new JTable();JScrollPane scrollPane = new JScrollPane(studentTable);tablePanel.setLayout(new BorderLayout());tablePanel.add(scrollPane, BorderLayout.CENTER);// 将顶部面板和表格面板添加到主面板panel.add(topPanel, BorderLayout.NORTH);panel.add(tablePanel, BorderLayout.CENTER);// 将主面板添加到窗口add(panel);
}

代码详解:

  • 为每个按钮添加了ActionListener,在按钮点击时显示一个消息对话框。实际应用中,你可以在这些监听器中调用控制器的方法来处理逻辑。

总结

在本文中,我们设计了一个使用Swing创建的学生管理系统的静态页面。我们实现了以下内容:

  1. 创建主窗口:设置窗口标题、大小、关闭操作、居中显示。
  2. 初始化组件:包括面板、标签、文本框、按钮和表格。
  3. 添加事件监听器:为按钮添加简单的事件监听器。

通过这种方式,我们可以创建一个简单而功能齐全的GUI,为学生管理系统的进一步开发打下基础。

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

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

相关文章

linux下I/O模型并发的epoll多进程池协程实现

方法1 主要思路: 定义了一个EventData结构体,用于存储事件相关的数据,如文件描述符、epoll 文件描述符、协程 ID 等。EchoDeal函数用于处理请求消息,并生成响应消息。handlerClient函数是协程的执行函数,用于处理客户…

gc.log中 CMS-concurrent-abortable-preclean

问题 在gc日志中看到 2024-06-26T16:16:07.5040800: 64690272.666: [CMS-concurrent-abortable-preclean-start]CMS: abort preclean due to time 2024-06-26T16:16:12.5530800: 64690277.716: [CMS-concurrent-abortable-preclean: 1.052/5.049 secs] [Times: user1.33 sys0…

Ubuntu系统安装软件---以安装QQ为例

以安装QQ为例,首先你的Ubuntu系统需要连上网,连上网的网络状态如下图所示。 在ubuntu系统的网页中搜索QQ,如下图所示。 进入QQ官网,点击Linux,如下图所示。 随后会让你选择什么架构的版本,如何查看自己的是…

【Python机器学习】分类向量——One-Hot编码(虚拟变量)

为了学习分类特征,以某国成年人收入数据集(adult)为例,adult数据集的任务是预测一名工人的收入是高于50k还是低于50k,这个数据集的特征包括工人的年龄、雇佣方式、教育水平、性别、每周工作时长、职业等。 这个任务属于…

【LinuxC语言】pthread_join与pthread_detach函数

文章目录 前言线程分离pthread_join函数作用函数原型参数含义返回值示例代码易混pthread_detach函数详解函数作用函数原型参数含义返回值示例代码总结前言 在并发编程中,线程的管理是一个重要的主题。特别是当我们需要处理线程的生命周期和资源管理时,这就变得尤为重要。在L…

代码随想录算法训练营第50天(py)| 动态规划 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列

1143.最长公共子序列 力扣链接 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列(未必连续) 的长度。如果不存在 公共子序列 ,返回 0 。 思路 确定dp含义 dp[i][j]:长度为[0,i-1]和[0,j-1]的最长公…

ONLYOFFICE 桌面编辑器 8.1使用体验分享

目录 编辑器市场现状与用户选择 ONLYOFFICE桌面编辑器概览和功能 ONLYOFFICE桌面编辑器概览 功能丰富的PDF编辑器 演示文稿编辑器的创新 文档编辑的灵活性 电子表格的高级功能 语言和本地化 用户界面和体验 媒体播放 云服务和本地处理 跨平台支持 总结 在线亲身体…

mapstruct实现各个实体间的类型转换(DTO转BO、BO转Entity)的实践

一、引入 在没有遇见mapstruct的时候,实现各个实体之间的转换,都是手动转换实现的,属性少一带你还好,当属性一多,代码就会变得很冗余,没必要的非逻辑的代码就会加多。。。。 比如: public cl…

vue封装原生table表格方法

适用场景:有若干个表格,前面几列格式不一致,但是后面几列格式皆为占一个单元格,所以需要封装表格,表格元素自动根据数据结构生成即可;并且用户可新增列数据。 分类: 固定数据部分 就是根据数据…

React--两种常见的组件嵌套方式

组件嵌套 简介在父组件外部直接使用子组在父组件的实现内部引入并使用子组件区别总结灵活性:可配置性:使用场景: 选择 简介 在 React 中,有两种常见的组件嵌套方式: 在父组件中直接使用子组件。在父组件的实现内部引…

openlayers性能优化——开启图层预加载、减少空白等待时间

使用切片图层时、地图拖拽会有空白图片,为了减少空白等待时间,我们可以开始图层预加载。 const map_top new Map({layers: [new TileLayer({preload:Infinity, //预加载source: new StadiaMaps({layer: "outdoors",}),}),],target: "ma…

LINKAI工作流的建立与调试,用到COW项目的微信机器人上

连接时需要把右边的号连到下一个框的输入,开始与结束是默认的。 可以单独调试模块 可以对模块进行个性化定义 最后进行总流程调试 将这里的code放到config.json文件中 接着又做了一个较复杂的工作流DgPz9wJaoh   QlCc34a8bP 原项目网址: https:/…

小程序中UnionID,AppID,AppSecret,OpenID怎么理解?

小程序中UnionID,AppID,AppSecret,OpenID怎么理解? 个人理解 UnionID:同一用户,对同一个微信开放平台下的不同应用,UnionID 是相同的。 AppID:小程序的身份证号码,是微信公众平台上的小程序 I…

【学习笔记-机器学习】感知机模型

Author:赵志乾 Date:2024-06-26 Declaration:All Right Reserved!!! 1. 基本概念 数据集的线性可分性:给定一个数据集 其中,,,,如果存在某个超平面S 能够将数…

Python的100道练习题目,每日一练,必成大神!!!

整理了100道Python的题目,如果你是一位初学者,这一百多道题可以 帮助你轻松的使用Python。初学 者每天可以尝试3-5个问题,经过这一百道题的练习,要把练习昨晚并且完全懂了,基本上Python就已 经入门了。如果你不是初学者…

Day 34:2368. 受限条件下可到达节点的数目

Leetcode 2368. 受限条件下可到达节点的数目 现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 ,共有 n - 1 条边。 给你一个二维整数数组 edges ,长度为 n - 1 ,其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一…

OpenCV 车道检测

OpenCV 车道检测 前言模型分析车道检测相关链接 前言 如果要检测道路图像中的车道,方法之一是利用深度学习的语义分割技术。而在 OpenCV 中解决此问题可以使用边缘检测器。在本节中,我们将了解如何使用边缘检测和直线检测识别道路图像中的车道。 模型分…

测试用例的基本要素与设计方法

测试用例的基本要素 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。 好的测试用例是一个不熟悉业务的人也能依据用例来很快的进行测试评价测试用…

RT-Thread使用HAL库实现双线程控制LED交替闪烁

如何创建工程我的其他文中你面有可以进去查看 1创建线程(以动态方式实现) 1-2创建函数入口 1-2启动函数 main.c文件源码 /** Copyright (c) 2006-2024, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date …

【课程总结】Day11(下):YOLO的入门使用

前言 YOLO的简介 YOLO(You Only Look Once)是一种流行的目标检测算法,由Joseph Redmon等人于2015年提出。YOLO的设计思想是将目标检测任务转化为单个神经网络的回归问题,通过在图像上划分网格并对每个网格预测边界框和类别置信度…