您的位置:首页 > Web前端

一个简单的记事本-----熟悉JFrame、j组件、事件处理机制(监听机制)、BufferedReader/BufferedWriter 、文件选择器组件JFileChooser

2018-03-13 15:28 597 查看
/**
* 记事本(界面+功能)
*/
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();
}
}

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: