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

/**
 * 记事本(界面+功能)
 */
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();
				}
			}
			
			
			
		}
	}

}



猜你喜欢

转载自blog.csdn.net/noreaday/article/details/79538290