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.rhkb.cn/news/207211.html

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

相关文章

Linux常用命令——vi命令

文章目录 vi的工作模式常用快捷键提示和技巧结论 Linux环境下的vi编辑器不仅以其强大的功能著称&#xff0c;也因其快捷键而闻名。这些快捷键可以显著提高编辑效率&#xff0c;是每个使用vi的人必须掌握的。下面将扩展介绍vi的一些常用快捷键。 vi的工作模式 vi主要有两种模式…

Linux信号超详细剖析

预备知识&#xff1a; 一、信号产生(OS发给进程) 1、键盘组合键 Linux中&#xff0c;一次登录对应一个终端&#xff0c;bash/shell。且只允许一个进程是前台进程&#xff0c;默认就是bash/shell&#xff0c;其它都是后台进程。获取键盘输入的是前台进程。 Ctrlc: 向前台进程…

【android开发-01】android中toast的用法介绍

1&#xff0c;android中toast的作用 在Android开发中&#xff0c;Toast是一种用于向用户显示简短消息的轻量级对话框。它通常用于向用户提供一些即时的反馈信息&#xff0c;例如操作结果、提示或警告。 Toast的主要作用如下&#xff1a; 提供反馈&#xff1a;Toast可以在用户…

每日一练2023.12.1——帅到没朋友【PTA】

题目链接&#xff1a;L1-020 帅到没朋友 题目要求&#xff1a; 当芸芸众生忙着在朋友圈中发照片的时候&#xff0c;总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤100&#xff09;&…

【MySQL】视图:简化查询

文章目录 create view … as创建视图更改或删除视图drop view 删除视图replace关键字&#xff1a;更改视图 可更新视图with check option子句&#xff1a;防止行被删除视图的其他优点简化查询减小数据库设计改动的影响使用视图限制基础表访问 create view … as创建视图 把常用…

分布式锁,分布式锁应该具备哪些条件,分布式锁的实现方式有:基于Zookeeper实现、Redis实现、数据库实现

文章目录 分布式锁0-1分布式锁--包含CAP理论模型概述分布式锁&#xff1a;分布式锁应该具备哪些条件&#xff1a;分布式锁的业务场景&#xff1a; 分布式锁的实现方式有&#xff1a;基于Zookeeper - 分布式锁实现思想优缺点基于Redis - 分布式锁实现思想实现思想的具体步骤&…

Linux驱动开发——网络设备驱动(实战篇)

目录 四、 网络设备驱动实例 五、DM9000 网络设备驱动代码分析 六、NAPI 七、习题 书接上回&#xff1a; Linux驱动开发——网络设备驱动&#xff08;理论篇&#xff09;-CSDN博客 &#xff08;没看过上面博客的同学&#xff0c;skb是linux对于网络套接字缓冲区的一个虚拟…

【微服务 SpringCloudAlibaba】实用篇 · Nacos配置中心

微服务&#xff08;6&#xff09; 文章目录 微服务&#xff08;6&#xff09;1. 统一配置管理1.1 在nacos中添加配置文件1.2 从微服务拉取配置 2. 配置热更新2.1 方式一2.2 方式二 3. 配置共享1&#xff09;添加一个环境共享配置2&#xff09;在user-service中读取共享配置3&am…

vue2 el-table 封装

vue2 el-table 封装 在 custom 文件夹下面创建 tableList.vue直接上代码&#xff08;代码比较多&#xff0c;复制可直接用&#xff09; <template><div class"mp-list"><el-tableref"multipleTable"class"mp-custom-table":dat…

Ubuntu18.4中安装wkhtmltopdf + Odoo16配置【二】

deepin Linux 安装wkhtmltopdf 1、先从官网的链接里下载linux对应的包 wkhtmltopdf/wkhtmltopdf 下载需要的版本&#xff0c;推荐版本&#xff0c;新测有效&#xff1a; wkhtmltox-0.12.4_linux-generic-amd64.tar.xz 2、解压下载的文件 解压后会有一个wkhtmltox文件夹 3…

【opencv】计算机视觉基础知识

目录 前言 1、什么是计算机视觉 2、图片处理基础操作 2.1 图片处理&#xff1a;读入图像 2.2 图片处理&#xff1a;显示图像 2.3 图片处理&#xff1a;图像保存 3、图像处理入门基础 3.1 图像成像原理介绍 3.2 图像分类 3.2.1 二值图像 3.2.2灰度图像 3.2.3彩色图像…

党建引领·和谐共建——赤岗街首届微型社区养老服务公益博览会开幕

服务咨询平台&#xff0c;让社区长者更便捷地了解到养老相关政策、信息。 本次活动由赤岗街公共卫生委员会、赤岗街道办事处、中国老龄事业发展基金会老年维权基金管理委员会主办&#xff0c;珠影社区居委会、广州市穗星社会工作服务中心、广州市盈泽信息科技有限公司承办&…

4/5G互操作 EPSFB讲解

今天我们来讲一下4/5G之间之间互操作&#xff0c;以及5G的EPSFB是基于什么实现的~ 目录 4/5G互操作 重选 切换 基于覆盖的切换 基于业务的切换 两个面试问题 想要加快4G切换5G的速度&#xff0c;调哪个参数怎么调高效&#xff1f; 想要减慢5G切换4G的速度调哪个参数怎…

项目计划阶段项目管理文档(风险管理、软件估计、立项、计划)

项目计划过程支撑文件&#xff1a; 1、风险和机会管理表 2、软件估计书模板 3、立项通知 4、项目计划书 软件开发全文档获取&#xff1a;点我获取 1、风险和机会管理表 2、软件估计书模板 3、立项通知 4、项目计划模板

Spring简单的存储和读取

前言 前面讲了spring的创建&#xff0c;现在说说关于Bean和五大类注解 一、Bean是什么&#xff1f; 在 Java 语⾔中对象也叫做 Bean&#xff0c;所以后⾯咱们再遇到对象就以 Bean 著称。这篇文章还是以spring创建为主。 二、存储对象 2.1 俩种存储方式 需要在 spring-conf…

A++ 敏捷开发-1 如何改善

1 如何改善 敏捷开发过程改进案例 5月 A公司一直专门为某电信公司提供针对客服、线上播放等服务服务。 张工是公司的中层管理者&#xff0c;管理好几个开发团队&#xff0c;有5位项目经理向他汇报。 他听说老同学的团队都开始用敏捷开发&#xff0c;很感兴趣&#xff0c;便参…

kafka中的常见问题处理

文章目录 1. 如何防⽌消息丢失2. 如何防⽌重复消费3. 如何做到消息的顺序消费4. 如何解决消息积压问题4.1 消息积压问题的出现4.2 消息积压的解决⽅案 5. 实现延时队列的效果5.1 应用场景5.2 具体方案 1. 如何防⽌消息丢失 ⽣产者&#xff1a;1&#xff09;使⽤同步发送 2&…

C语言——有一个3*4的矩阵,要求求出其中值最大的那个元素的值,以及其所在的行号和列号

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j,row0,colum0,a[3][4]{{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};int maxa[0][0];for ( i 0; i < 3; i)//行&#xff08;row&#xff09;{for ( j 0; j < 4; j)//列&#xff08;colum&#xf…

Microsoft Remote Desktop高效、安全、稳定的远程办公解决方案

在今天的数字化时代&#xff0c;Remote Desktop远程办公已成为许多人的日常生活。无论你是因为工作需要&#xff0c;还是因为在家中需要访问公司服务器&#xff0c;微软远程连接软件都是一个理想的选择。 微软远程连接软件Remote Desktop是一款高效、安全、稳定的远程办公解决…

sublime Text使用

1、增加install 命令面板 工具(tool)->控制面板(command palette) -> 输入install ->安装第一个install package controller&#xff0c;以下安装过了&#xff0c;所以没展示 2、安装json格式化工具 点击install package&#xff0c;等几秒会进入控制面板&#xff0…