Java学习记录(六):记事本
1、题目及素材来源
题目来自于BILIBILI黑马程序员官方Java基础教程,具体包括原始代码以及相关素材,相关业务逻辑的实现根据教程的要求自己独立实现。详细功能需求以及相关要求可自行观看其对应教程。
2、整体效果
(1)主界面
(2)添加信息页面
(3)修改信息页面
3、各个功能简要介绍
(1)添加信息
直接点击添加按钮即可跳转至添加信息页面,然后输入对应信息点击保存即可,最后点击取消或关闭添加页面即可返回主页面。若没有输入信息或输入完整将无法完成添加。(要保证在项目根目录下存在一个data文件夹用于存储持久化数据文件)
(2)更新信息
首先保证主页面列表有数据存在,然后选中某一条数据点击修改即可跳转至修改页面,对相关内容进行修改然后点击保存即可,保存完成或者不想修改直接点击取消或者点击右上角关闭即可返回主页面。若在最开始没有数据或没有选中一条数据则无法跳转,且修改时需要保证你已经对内容做出了修改才能保存成功,否则将无法保存。
(3)删除信息
首先保证主页面列表有数据存在,然后选中某一条数据点击删除按钮将会跳出确认删除对话框,点击取消可以取消删除,点击确认可以确认删除。
(4)数据导入导出
左上角菜单栏中存在导入导出菜单选项,点击后可以实现导入导出功能,点击导出将自动以压缩包的方式保存至桌面(需要修改对应的文件路径),点击导入将从桌面导入文件。
4、各文件完整代码
(1)项目启动文件
import com.test.NoteJFrame;
public class App {
public static void main(String[] args) {
new NoteJFrame();
}
}
(2)笔记内容Java bean类
package com.test.bean;
import java.io.Serializable;
public class TableContent implements Serializable {
private static final long serialVersionUID = 100001L;
private String id;
private String title;
private String content;
public TableContent() {
}
public TableContent(String id, String title, String content) {
this.id = id;
this.title = title;
this.content = content;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "TableContent{" +
"id='" + id + '\'' +
", title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
(3)主界面代码文件
package com.test;
import com.test.bean.TableContent;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class NoteJFrame extends JFrame implements ActionListener {
//创建三个按钮
JButton add = new JButton("添加");
JButton update = new JButton("修改");
JButton delete = new JButton("删除");
//创建表格组件
JTable table;
//创建菜单的导入和导出
JMenuItem exportItem = new JMenuItem("导出");
JMenuItem importItem = new JMenuItem("导入");
ArrayList<TableContent> contentList;
public NoteJFrame() {
//获取保存于本地的日记数据
getContentList();
//初始化界面
initFrame();
//初始化菜单
initJmenuBar();
//初始化组件
initView();
//初始化表格数据
this.refreshTableContent();
//让界面显示出来
this.setVisible(true);
}
private void getContentList() {
// 初始化一个空列表,即使文件不存在的时候也是列表
contentList = new ArrayList<>();
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data\\save.ser"));
contentList = (ArrayList<TableContent>) ois.readObject();
ois.close();
} catch (IOException | ClassNotFoundException e) {
System.out.println("INFO: " + "System has not added any data yet.");
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
//获取当前那个组件被点击
Object obj = e.getSource();
if(obj == add){
System.out.println("添加按钮被点击");
this.setVisible(false);
new AddJFrame(contentList);
}else if(obj == update){
System.out.println("修改按钮被点击");
//逻辑:
//1.先判断用户有没有选择表格中的数据
//2.如果没有选择,弹框提示:未选择。此时提示的弹框用showJDialog方法即可
//3.如果选择了,跳转添加界面
//获取用户选择了表格中的哪一行
//i = 0: 表示用户选择了第一行
//i = 1: 表示用户选择了第一行
//i有两个作用:
//i小于0,表示用户没有选择,此时无法修改
//i大于等于0:通过这个行数就可以获取二维数组中对应的数据
int i = table.getSelectedRow();
//System.out.println(i);
if (i == -1) {
String msg = "请先选择你要修改的内容!";
JOptionPane.showMessageDialog(null, msg, "提示", JOptionPane.ERROR_MESSAGE);
} else {
this.setVisible(false);
new UpdateJFrame(contentList, i);
}
}else if(obj == delete){
//System.out.println("删除按钮被点击");
//逻辑:
//1.先判断用户有没有选择表格中的数据
//2.如果没有选择,弹框提示:未选择。此时提示的弹框用showJDialog方法即可
//3.如果选择了,弹框提示:是否确定删除。此时提示的弹框用showChooseJDialog方法
int idx = table.getSelectedRow();
System.out.println(idx);
if(idx == -1){
String msg = "请先选择你要删除的内容!";
JOptionPane.showMessageDialog(null, msg, "提示", JOptionPane.ERROR_MESSAGE);
} else {
//作用:展示一个带有确定和取消按钮的弹框
//方法的返回值:0 表示用户点击了确定
// 1 表示用户点击了取消
//该弹框用于用户删除时候,询问用户是否确定删除
int selection = showChooseJDial