/**
* 记事本(界面+功能)
*/
package com.note;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
public class NotePad extends JFrame implements ActionListener{
//定义需要的组件
JTextArea jTextArea=null;//定义多行文本框组件
JMenuBar jMenuBar=null;//菜单条
JMenu jMenu=null;//菜单
JMenuItem jMenuItem=null;//菜单项
JMenuItem jMenuItem2=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
NotePad notePad=new NotePad();
}
public NotePad(){
//构建组件
jTextArea=new JTextArea();
jMenuBar=new JMenuBar();
jMenu =new JMenu("File");
jMenu.setMnemonic('f');//设置jmenu的助记符,即按下Ctrl+f便代表了File
ImageIcon ico=new ImageIcon("new0.jpg");
ico.setImage(ico.getImage().getScaledInstance(20,20,Image.SCALE_DEFAULT));//调整图标的大小
jMenuItem=new JMenuItem("open File",ico);//设置菜单项并给该菜单项添加一个图标
jMenuItem.setActionCommand("open");//设置此按钮的动作命令。
jMenuItem.addActionListener(this);//注册监听
jMenuItem2=new JMenuItem("save");
jMenuItem2.setActionCommand("save");
jMenuItem2.addActionListener(this);
//添加组价
this.add(jTextArea);
this.setJMenuBar(jMenuBar);
jMenuBar.add(jMenu);
jMenu.add(jMenuItem);
jMenu.add(jMenuItem2);
//组件属性设置
this.setTitle("我的记事本");
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//记事本的打开文件功能
if (e.getActionCommand().equals("open")) {
//创建文件选择器对话框
//文件选择器对话框组件
JFileChooser jFileChooser=new JFileChooser();
//给文件选择器对话框设置标题
jFileChooser.setDialogTitle("请选择打开的文件...");
//显示“打开文件”文件选择器对话框
jFileChooser.showOpenDialog(null);
//得到用户选择的文件的绝对路径
String fileAdress=jFileChooser.getSelectedFile().getPath();
//System.out.println(fileAdress);
//读取选择文本的内容(此处选择了缓冲输入流bufferedreader)
FileReader fileReader=null; //定义需要的FileReader和BufferedReader
BufferedReader bufferedReader=null;
try {
fileReader=new FileReader(fileAdress);//将目标文件初始化为FileReader对象,将目标文件初始化为字符输入流
bufferedReader=new BufferedReader(fileReader);//初始化bufferedReader对象,即从字符输入流读取文本,放入缓冲字符输入流
//也可以:bufferedReader=new BufferedReader(new FileReader(fileAdress))
String string="";//循环读取。从缓冲输入流一行行读取文本到内存。用string指向(一行)
String allCon="";//将读取的每一行信息整合到allcon中
try {
while ((string=bufferedReader.readLine())!=null) {
allCon+=(string+"\r\n");//加换行符保持文本的格式,此时读取的文本内容都已放置到allcon中
}
//将内存的目标文本内容(allcon指向)放到jtextarea多行文本框中
jTextArea.setText(allCon);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally {
//关闭流
try {
fileReader.close();
bufferedReader.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
//记事本的保存功能
if (e.getActionCommand().equals("save")) {
//出现保存对话框(文件选择器)
JFileChooser jFileChooser=new JFileChooser();
jFileChooser.setDialogTitle("保存到...");
jFileChooser.showSaveDialog(null);//,显示保存对话框。保存与打开的区别函数
//保存写好后的内容(将多行文本框的内容写入磁盘)
BufferedWriter bufferedWriter=null;
String fileAdress=jFileChooser.getSelectedFile().getPath();//获得想要保存的位置的路径
try {
bufferedWriter=new BufferedWriter(new FileWriter(fileAdress));
//给指定文件写入内容
String strings[]=this.jTextArea.getText().split("\n");
for(String string:strings){
bufferedWriter.write(string+"\n"); //将文本框内容一行行的写入
}
//bufferedWriter.write(this.jTextArea.getText());//将整个多行文本框内容写入,内存占用太大
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally {
try {
bufferedWriter.close();//关闭流
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}