java实战(四):编写学生信息管理系统页面·

1.要求

编写程序 实现表格的输入和编辑功能。界面如下:

 

 

1、用户按插入键后,把学号、姓名和成绩插入到最后一行,序号显示当前的行号。

2、当用户选中表格的某一行时,按删除按钮,则这一行从表格中删除

3、编辑功能,用户可以直接双击表格上的某一行进行内容编辑,例如修改成绩或者姓名,学号。

4、表格的内容保存到一个文件中,等下一次程序启动时重新加载保存的内容到表格中。

2.代码实现

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import java.io.*;public class TableExample extends JFrame {private JTable table; // 表格组件private DefaultTableModel tableModel; // 表格模型private JTextField studentIdField; // 学号输入框private JTextField nameField; // 姓名输入框private JTextField scoreField; // 成绩输入框public TableExample() {setTitle("表格示例"); // 设置窗口标题setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口关闭操作setSize(800, 600); // 设置窗口大小// 创建表格模型tableModel = new DefaultTableModel() {@Overridepublic boolean isCellEditable(int row, int column) {// 设置序号列不可编辑return column != 0;}};tableModel.addColumn("序号"); // 添加列名tableModel.addColumn("学号");tableModel.addColumn("姓名");tableModel.addColumn("成绩");// 创建表格table = new JTable(tableModel);// 创建插入面板JPanel insertPanel = new JPanel();insertPanel.setLayout(new FlowLayout());// 创建学号输入框studentIdField = new JTextField(5);insertPanel.add(new JLabel("学号:"));insertPanel.add(studentIdField);// 创建姓名输入框nameField = new JTextField(5);insertPanel.add(new JLabel("姓名:"));insertPanel.add(nameField);// 创建成绩输入框scoreField = new JTextField(5);insertPanel.add(new JLabel("成绩:"));insertPanel.add(scoreField);// 创建插入按钮JButton insertButton = new JButton("插入");insertPanel.add(insertButton);insertButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 获取用户输入的学号、姓名和成绩String studentId = studentIdField.getText();String name = nameField.getText();String score = scoreField.getText();// 插入新行Vector<String> rowData = new Vector<>();rowData.add(String.valueOf(tableModel.getRowCount() + 1)); // 序号rowData.add(studentId);rowData.add(name);rowData.add(score);tableModel.addRow(rowData);// 清空输入框studentIdField.setText("");nameField.setText("");scoreField.setText("");}});// 创建删除按钮JButton deleteButton = new JButton("删除");insertPanel.add(deleteButton);deleteButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 获取选中的行int selectedRow = table.getSelectedRow();// 删除选中的行if (selectedRow >= 0) {tableModel.removeRow(selectedRow);}}});// 创建面板并添加按钮和表格JPanel panel = new JPanel();panel.setLayout(new BorderLayout());panel.add(insertPanel, BorderLayout.SOUTH);panel.add(new JScrollPane(table), BorderLayout.CENTER);// 将面板添加到窗口中add(panel);// 添加窗口关闭事件监听器addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {saveTableData();}});// 加载保存的表格内容loadTableData();setVisible(true); // 设置窗口可见}// 保存表格内容到文件private void saveTableData() {try {FileWriter writer = new FileWriter("table_data.txt"); // 创建文件写入流BufferedWriter bufferedWriter = new BufferedWriter(writer); // 创建缓冲写入流// 逐行写入表格数据for (int i = 0; i < tableModel.getRowCount(); i++) {for (int j = 0; j < tableModel.getColumnCount(); j++) {bufferedWriter.write(tableModel.getValueAt(i, j).toString()); // 获取表格数据并写入文件bufferedWriter.write(","); // 以逗号分隔每个单元格的数据}bufferedWriter.newLine(); // 换行}bufferedWriter.close(); // 关闭缓冲写入流writer.close(); // 关闭文件写入流} catch (IOException e) {e.printStackTrace();}}// 从文件加载表格内容private void loadTableData() {try {File file = new File("table_data.txt"); // 创建文件对象if (file.exists()) { // 判断文件是否存在FileReader reader = new FileReader(file); // 创建文件读取流BufferedReader bufferedReader = new BufferedReader(reader); // 创建缓冲读取流String line;while ((line = bufferedReader.readLine()) != null) { // 逐行读取文件内容String[] data = line.split(","); // 以逗号分隔每个单元格的数据tableModel.addRow(data); // 添加行数据到表格模型}bufferedReader.close(); // 关闭缓冲读取流reader.close(); // 关闭文件读取流}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {new TableExample(); // 创建表格示例对象}
}

3.效果

点插入可以生成

 

点击可以删除 

 

加了个监视器,若关闭了就会保存文件,然后再写一个加载数据的函数,在每一次创建之后都可以加载数据

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

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

相关文章

OpenCV中八种不同的目标追踪算法

引言 目标跟踪作为机器学习的一个重要分支&#xff0c;加之其在日常生活、军事行动中的广泛应用&#xff0c;受到极大的关注。在AI潮流中&#xff0c;大家对于深度学习&#xff0c;目标跟踪肯定都会有过接触了解&#xff1a;在GPU上通过大量的数据集训练出自己想使用的垂直场景…

sqli-labs(9)

45. 不会显示报错信息通过or 1验证 在密码处输入)or(1 登录成功 )union select 1,2,3 # )union select 1,database(),3 # )union select 1,(select group_concat(table_name) from information_schema.tables where table_schemasecurity),3 # )union select 1,(select gro…

学习记录PCL-1 通过哈希表进行三维点云的虚拟格网划分

直接对整个场景的点云进行特征提取&#xff0c;效果很差&#xff0c;因此通过划分区域格网进行划分。格网划分有很多种方式&#xff0c;在这里尝试使用哈希表进行格网链接&#xff0c;后续通过在每个格网内基于点云特征进行提取。 参考博客&#xff1a; 点云侠的PCL 点云分块_p…

ESP32-Web-Server编程- 通过文本框向 Web 提交数据

ESP32-Web-Server编程- 通过文本框向 Web 提交数据 概述 前述章节我们通过简单 HTML、AJAX、Websocket、SSE 在网页上显示数据&#xff0c;通过网页上的按钮控制 ESP32 的行为。从本节开始&#xff0c;我们将进一步了解通过网页与 ESP32 进行交互的方法。 实现更复杂的交互功…

【OJ比赛日历】快周末了,不来一场比赛吗? #12.02-12.08 #15场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-12-02&#xff08;周六&#xff09; #4场比赛2023-12-03…

nginx部署多个vue或react项目

下载nginx(tar.gz) nginx: download(官方地址) 部署nginx # 进入nginx压缩包所在目录 cd /usr/nginx# 解压 tar -zxvf nginx-1.25.3.tar.gz# 安装nginx的相关依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel# 生成Makefile可编译文件 cd /usr/ng…

Electron+Ts+Vue+Vite桌面应用系列:TypeScript常用时间处理工具

文章目录 1️⃣ 时间处理工具1.1 格式化时间1.2 把时间戳改成日期格式1.3 Day.js 工具类使用1.4 date-fns 工具类使用 优质资源分享 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134712978 ElectronTsVueVite桌面应用…

华为全屋智能5.0,无为而“智”

在赖特西塔里埃森混凝土墙的中心壁龛里&#xff0c;一块铜牌上刻着一些英文&#xff0c;意思是“建筑的意义不是屋顶和墙&#xff0c;而是人们生活于其中的空间”。 这句话&#xff0c;取自老子《道德经》中的“凿户牖以为室&#xff0c;当其无&#xff0c;有室之用”。 《理想…

数据库管理-第119期 记一次迁移和性能优化(202301130)

数据库管理-第119期 记一次迁移和性能优化&#xff08;202301130&#xff09; 1 迁移 之前因为DV组件没有迁移成功的那个PDB&#xff0c;后来想着在目标端安装DV组件迁移&#xff0c;结果目标端装不上&#xff0c;而且开了SR也没看出个所以然来。只能换一个方向&#xff0c;尝…

VIR-SLAM代码分析3——VIR_VINS详解之estimator.cpp/.h

前言 续接上一篇&#xff0c;本本篇接着介绍VIR-SLAM中estimator.cpp/.h文件的函数&#xff0c;尤其是和UWB相关的相比于VINS改动过的函数&#xff0c;仍然以具体功能情况代码注释的形式进行介绍。 重点函数介绍 优化函数&#xff0c;代码是先优化&#xff0c;后边缘化。 …

mysql 日志分析

程序启动标志 可以直接全局搜索&#xff0c;查看启动了几次 可以看到总共11次&#xff0c;当前是第2次 如何判断mysql是正常关闭&#xff0c;手动启动的 下图中启动之前出现 Shutdown complete打印说明启动之前是正常关闭的

Serilog .net下的新兴的日志框架

Serilog .net下的新兴的日志框架 1.Serilog简介 Serilog 是针对 .NET 应用程序的流行日志记录框架。它以其灵活性、易用性和可扩展性而闻名。借助 Serilog&#xff0c;开发人员可以轻松记录应用程序中的事件、错误和消息。它支持结构化日志记录&#xff0c;能够以结构化格式存…

贪心 55. 跳跃游戏 45.跳跃游戏 II

55. 跳跃游戏 题目&#xff1a; 给定非负数组&#xff0c;初始位置在数组第一格&#xff0c;数组值是可以选择的最大跳跃步数&#xff0c;判断能不能达到数组末尾。 示例 1: * 输入: [2,3,1,1,4] * 输出: true * 解释: 我们可以先跳 1 步&#xff0c;从位置 0 到达 位置 1,…

AWS EC2 如何 使用 SSM会话管理器登陆

首先只有特定版本的OS会默认附带SSM Agent。 预安装了 SSM Agent 的 Amazon Machine Images&#xff08;AMIs&#xff09; - AWS Systems Manager 其次EC的instance role必须有一个叫“AmazonSSMManagedInstanceCore”的策略 如何给IAM User赋权&#xff0c;让他们可以使用SSM…

appium :输入框控件为android.view.View 时输入内容(如:验证码、密码输入框)

问题背景 输入密码的组件信息为&#xff1a;<android.view.View resource-id“com.qq.ac.android:id/pwd_input”> 由于输入框控件是android.view.View&#xff0c;不是android.widget.EditText&#xff0c;所以只能点击&#xff0c;而启动appium后&#xff0c;会将输入…

Vue语音播报,不用安装任何包和插件,直接调用。

Vue语音播报功能可以通过使用浏览器提供的Web Speech API来实现。这个API允许你的应用程序通过浏览器朗读文本&#xff0c;不用安装任何包和插件&#xff0c;直接调用。以下是一个简单的介绍&#xff0c;演示如何在Vue中使用语音提示功能&#xff1a; 一、JS版本 <template…

XTU OJ 1339 Interprime 学习笔记

链接 传送门 代码 #include<bits/stdc.h> using namespace std;const int N1e610; //78498 我计算了一下&#xff0c;6个0的范围内有这么多个素数&#xff0c;所以开这么大的数组存素数 //计算的代码是一个循环 int prime[80000]; int a[N],s[N];//s数组是前缀和数组b…

高等数学上岸宝典笔记

①不单调的函数也可能有反函数 ②注意反函数与函数转换时的定义域与值域 ③收敛数列不一定有最值 收敛数列必有上界和下界&#xff0c;但不一定有最值&#xff0c;比如{An}1/n&#xff0c;下界为0&#xff0c;但永远取不到0 ④数列与其子数列的关系 例题&#xff1a; ⑤带根号…

Linux常用命令——cd命令

文章目录 1. 简介2. 命令参数3. 常见用法与实例3.1 基本用法3.2 使用绝对路径或相对路径3.3 使用特殊字符3.4 使用参数 4. 总结 1. 简介 cd命令是Linux系统中最基础且频繁使用的命令之一&#xff0c;用于改变当前工作目录。它是“change directory”的缩写&#xff0c;对于任何…

网狐类源码游戏配置数据库数据(一键配置网狐数据库)

网狐类源码游戏配置数据库数据&#xff08;一键配置网狐数据库&#xff09; 一般拿到网狐的源码或组件&#xff0c;需要先附加或配置数据库&#xff0c;以下为全部需要更改数据的地方&#xff0c;这里以荣耀系列版本数据库为例&#xff1a; 1. 数据库设置 [RYPlatformDB].…