今天闲来没事,自己写了一个简易的记事本,需要java GUI编程,一个文本输入框JTextArea,一条菜单条JMenuBar,两个JMenu,两个JMenuItem,然后就是模仿你自己电脑自带的记事本那样大致写,模仿他的布局。利用java中的文件操作,实现记事本的功能。(因为这个记事本就是对文本的操作,自己用BufferedReader,BufferedWriter,效率高)
这里我先把代码附在这里:
package com.notepad;
/*
* 我的记事本(功能+开发)
*/
import java.io.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Note extends JFrame implements ActionListener{
//创建组件
JTextArea jta = null;
//创建菜单条
JMenuBar jmb = null;
//第一个JMenue
JMenu jm1 = null;
//第二个JMenue
JMenu jm2 = null;
//定义JMenuItem(JMenue里边具体的选项)
JMenuItem jmi1 = null;
JMenuItem jmi2 = null;
//主函数
public static void main(String[] args) {
Note n1 = new Note();
}
//在构造函数中完成初始化
public Note(){
jta = new JTextArea();
jmb = new JMenuBar();
jm1 = new JMenu("文件");
jm2 = new JMenu("编辑");
jmi1 = new JMenuItem("打开");
jmi2 = new JMenuItem("保存");
//设置JTextArea的字体
Font mf = new Font("隶书",Font.PLAIN,20);
jta.setFont(mf);
//注册监听
jmi1.addActionListener(this);
jmi2.addActionListener(this);
//设置监听名称
jmi1.setActionCommand("open");
jmi2.setActionCommand("save");
//设置助记符
jmi1.setMnemonic('F');
jmi2.setMnemonic('S');
//添加JMenuBar,并且逐级添加菜单
this.setJMenuBar(jmb);
jmb.add(jm1);
jmb.add(jm2);
jm1.add(jmi1);
jm1.add(jmi2);
//添加
this.add(jta);
this.setSize(800,600);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent arg0) {
if(arg0.getActionCommand().equals("open")){
JFileChooser jfc1 = new JFileChooser();
//设置名字
jfc1.setDialogTitle("请选择文件...");
//使用默认方式
jfc1.showOpenDialog(null);
//显示
jfc1.setVisible(true);
//得到用户选择文件的全路径
String filename1 = jfc1.getSelectedFile().getAbsolutePath();
//System.out.println(filename);
BufferedReader br = null;
FileReader fr = null;
char[] buf = new char[1024];
try{
fr = new FileReader(filename1);
br = new BufferedReader(fr);
String s = "";
String allCon = "";
//从文件中读取信息,并显示在JTextArea控件中
while((s=br.readLine())!=null){
allCon = allCon + s + "\r\n";
}
jta.setText(allCon);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
//文件流一定要关闭
br.close();
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else if(arg0.getActionCommand().equals("save")){
//出现保存对话框
JFileChooser jfc = new JFileChooser();
jfc.setDialogTitle("另存为...");
//按照默认方式显示
jfc.showSaveDialog(null);
jfc.setVisible(true);
//得到文件全路径
String filename2 = jfc.getSelectedFile().getAbsolutePath();
//准备到写入指定文件即可
BufferedWriter bw = null;
FileWriter fw = null;
try{
fw =new FileWriter(filename2);
bw = new BufferedWriter(fw);
bw.write(this.jta.getText());
}catch(Exception e){
e.printStackTrace();
}finally{
try {
bw.close();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
我在代码里加了很多的注释,也是自己写程序的理解吧,但是自己在写的时候还是遇到问题了,在关闭文件流的时候,关闭的顺序不对会报异常,因为用到了BufferedReader
和BufferedWriter,所以还要使用FileReader和FileWriter,在关闭文件流的时候,先要关闭BufferedReader,
BufferedWriter的对象,然后关闭FileReader,FileWriter的对象,否则
就会报异常Stream closed(流关闭)导致文件无法正常操作。这里我也想介绍一下JFileChooser的简单用法,这就是我们打开文件,或者保存文件显示选择的窗口,然后进行相应
的操作。因为涉及到相应的按钮点击之后响应操作,就需要添加事件监听(注意:要添加时间监听,并且设置时间监听的名称),在程序里自己还简单的设计了两个助记符,就是
打开文件,保存问价时的文件助记符(Alt+shift+字母)。
打开文件的窗口时方法showOpenDialog(null)(对象调用,默认方式),保存窗口showSaveDialog(null,默认方式)(对象调用),注意还要设置他们的可视化,就是显示出来
setVisible(true),然后相关的文件操作我自己就不在这里过多的赘述了,在程序中已经很详细的解释了。
这里是相应的截图:
自己写的,测试运行成功,希望对你有帮助。如果遇到什么问题,希望评论,一起解决。