仿记事本--含源码(java版)(基础功能版)
题目:
掌握常用组件的基本操作以及输入输出流的使用,并用相关知识设置一个仿记事本软件,能够实现新建、打开、保存和另存为等基本功能。
设计思路:
1.明确题目要求的功能:新建文件、打开文件、保存文件、另存为文件
2.了解记事本的操作:题目较为简单明了--仿记事本,因此我们便要大致了解记事本是什么样的,其基本模板便是左上角为功能区,有一个文本区,这个是最直观的表示。因此,我们也选择模仿这个布局。
3.通过该图片,来设置我们的页面布局:我们可以发现其功能都是以菜单形式展示出来,而我们所需要完成的功能都在文件这一菜单下,因此我们也采取菜单组件对其进行设计,我们创建四个菜单项itemNew、itemOpen、itemSave、itemSaveAs分别代表新建、打开、保存和另存为四个功能,之后建立一个菜单menu,将这些菜单项添加到菜单中,最后将菜单加入到菜单条menuBar中即可;除此我们通过创建JTextArea类的对象area来实现上图文本区的功能;最后对四个菜单项通过addActionListener()方法添加事件监听即可。以上就是对窗体基本的页面布局。
4.实现功能:通过使用记事本我们很容易发现一点,记事本是需要和本机文件进行交互的,即可视化选择文件及选择文件夹,在这里,我们便要使用Java提供的JFileChooser类,该类可以创建文件对话框,让我们能够在可视化界面对文件进行交互;文件对话框有三种可见方法,showDialog()、showSaveDialog()、showOpenDialog(),后面两个方法为保存和打开的可视化界面,那么我们在写打开和保存的时候也可以直接使用这两个方法,在实现新建和另存为时,我们需要自定义文件对话框,需要使用showDialog()方法,在该方法中,需要传递参数showDialog(Component a,String name);前面的参数为一个组件,通常使用this即可,后面的name表示我们定义的名字,我对其分别定义为“新建”和“另存为”来对应这两个功能。在实现了这个可视化操作之后,后面的就比较简单了,只需要通过IO流对其进行读写操作即可,在这里面我使用的是缓冲流读写,可以按行读取,较为方便。
知识储备:
该程序难度偏中低等,可以作为我们学习完窗体和IO流之后对我们的小测试,涉及到的知识点如下:
1.组件的常规操作:该问题中设计到的组件不多,所以可以多研究一下,怎么写能够使自己的布局思路更加清晰,用来锻炼自己的思维比价合适;
2.IO流的读写操作:该题目涉及到对文本的读取等操作,了解IO流的基本知识便可以,没有难度较大的知识点;
3.学会使用文本选择框:在文本选择框中存在比较多的方法,要熟悉这些方法的使用,能够对我们的代码做到全部理解。
代码:
//主类
package Demo_24_shiyan;
/**
* @ClassName 主类
* @Description TODO
* @Author 今夕河西
* @Date 2022-09-30 19:10
* @Version 1.0
**/
public class Main {
public static void main(String[] args) {
Txt_Text win = new Txt_Text();
win.setTitle("记事本");
}
}
//窗体事件类
package Demo_24_shiyan;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
/**
* @ClassName 仿记事本
* @Description TODO:设计一个仿记事本软件,实现新建、打开、保存、另存为等基本功能
* @Author 今夕河西
* @Date 2022-09-30 19:08
* @Version 1.0
**/
public class Txt_Text extends JFrame implements ActionListener {
//创建组件
JMenuBar menuBar; //菜单条
JMenu menu; //菜单
JMenuItem itemNew,itemOpen,itemSave,itemSaveAs; //菜单项:新建、打开、保存、另存为
JTextArea area; //文本区:展示内容的地方
JFileChooser fileDialog; //创建文件对话框
BufferedReader in; //缓冲流读入
FileReader fileReader; //文件读入
BufferedWriter out; //缓冲流写出
FileWriter fileWriter; //文件写出
Txt_Text () {
init();
setSize(300,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init() {
//文本区实例化
area = new JTextArea(10,10);
area.setFont(new Font("宋体",Font.PLAIN,14)); //设置文本格式
add(new JScrollPane(area),BorderLayout.CENTER);
//菜单区域实例化
menuBar = new JMenuBar();
menu = new JMenu("功能");
itemNew = new JMenuItem("新建");
itemOpen = new JMenuItem("打开");
itemSave = new JMenuItem("保存");
itemSaveAs = new JMenuItem("另存为");
itemNew.addActionListener(this); //添加事件
itemOpen.addActionListener(this);
itemSave.addActionListener(this);
itemSaveAs.addActionListener(this);
menu.add(itemNew);
menu.add(itemOpen);
menu.add(itemSave);
menu.add(itemSaveAs);
menuBar.add(menu);
setJMenuBar(menuBar);
//文件对话框实例化
fileDialog = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("txt文件","txt");
fileDialog.setFileFilter(filter);
}
@Override
public void actionPerformed(ActionEvent e) {
//完成对事件的操作
if (e.getSource() == itemNew) { //新建功能
int state = fileDialog.showDialog(this,"新建"); //打开文件对话框
if (state == JFileChooser.APPROVE_OPTION) {
File dir = fileDialog.getCurrentDirectory(); //获取当前所选择界面的路径
//通过输入对话框来为文件命名
String str = JOptionPane.showInputDialog(this,"请输入文件名:",JOptionPane.PLAIN_MESSAGE)+".txt";
File file = new File(dir,str);
if(!file.exists()) { //查看改文件夹下是否有改文件,没有则新建文件
try {
file.createNewFile();
}
catch (IOException ee) { }
}
}
}
if (e.getSource() == itemOpen) { //打开功能
int state = fileDialog.showOpenDialog(this);
if (state == JFileChooser.APPROVE_OPTION) {
area.setText(null); //先把文本区域置空
try {
File dir = fileDialog.getCurrentDirectory(); //获取当前选择界面的路径
String name = fileDialog.getSelectedFile().getName(); //获取当前选择的文件的名称
File file = new File(dir,name); //获取选择的文件
fileReader = new FileReader(file); //文件读入
in = new BufferedReader(fileReader); //通过缓冲流读取文件内容
String s = null;
while ((s = in.readLine()) != null) { //逐行读取文件
area.append("\n" + s); //将读取到的内容写入到创建的文本区内进行打开
}
in.close();
fileReader.close();
}
catch (IOException ee) { }
}
}
if (e.getSource() == itemSave) { //保存功能
int state = fileDialog.showSaveDialog(this);
if (state == JFileChooser.APPROVE_OPTION) {
try {
File dir = fileDialog.getCurrentDirectory(); //获取当前选择界面的路径
String name = fileDialog.getSelectedFile().getName();
File file = new File(dir,name);
fileWriter = new FileWriter(file);
out = new BufferedWriter(fileWriter);
out.write(area.getText());
out.close();
fileWriter.close();
}
catch (IOException ee) { }
}
}
if (e.getSource() == itemSaveAs) { //另存为功能
int state = fileDialog.showDialog(this,"另存为");
if (state == JFileChooser.APPROVE_OPTION) {
File dir = fileDialog.getCurrentDirectory();
String str = JOptionPane.showInputDialog(this,"请输入文件名:",JOptionPane.PLAIN_MESSAGE)+".txt";
File file = new File(dir,str);
try {
file.createNewFile(); //新建文件
fileWriter = new FileWriter(file);
out = new BufferedWriter(fileWriter);
out.write(area.getText()); //把内容写入到新建的文件中,完成另存
out.close();
fileWriter.close();
}
catch (IOException ee) { }
}
}
}
}
运行结果:
布局:
新建功能的文件对话框界面:
通过输入消息框对文件进行命名
创建文件的结果:
打开功能文件对话框界面:
打开的文件在界面显示:
保存功能文件对话框界面:
保存到该文件夹:
另存为功能文件选择框界面:
通过消息弹框对其命名:
另存为之后的结果: