java 记事本。

import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class TestJMenuBar implements ActionListener {
	private JFrame jf;
	private JTextArea jta;
	private JMenuBar jmb;
	private boolean wasSaved=true;
	private String filePath;


public TestJMenuBar() {
	jf=new JFrame("记事本");
	jta=new JTextArea(20,50);
	jmb=new JMenuBar();
	String[] jmLab={"文件","编辑","帮助"};
	String[][] jmiLab={{"新建","打开","","保存","另存为","","退出"},
					   {"撤销","","剪切","复制","粘贴","","查找","替换"},
					   {"关于记事本"}};
	
	
	for (int i = 0; i < jmLab.length; i++) {
		JMenu jm=new JMenu(jmLab[i]);
		
		for (int j = 0; j < jmiLab[i].length; j++) {
			if("".equals(jmiLab[i][j])){
				jm.addSeparator();
			}else{
				JMenuItem jmi=new JMenuItem(jmiLab[i][j]);
				jmi.addActionListener(this);
				jm.add(jmi);
			}
		}
		
		jmb.add(jm);
	}
}

private void init(){
	JScrollPane jsp=new JScrollPane(jta);
	jf.add(jsp);
	jf.setJMenuBar(jmb);
}

private void addEventHandler(){
	jf.addWindowListener(new WindowAdapter(){
		@Override
		public void windowClosing(WindowEvent e) {
			if(false==wasSaved){
				int op=JOptionPane.showConfirmDialog(jf, "文件没有保存是否退出?","确认退出",JOptionPane.YES_NO_CANCEL_OPTION);
				if(op!=JOptionPane.YES_OPTION){
					return;
				}
			}
			
			System.exit(0);
		}
	});
	
	
	jta.getDocument().addDocumentListener(new DocumentListener(){

		public void changedUpdate(DocumentEvent e) {
			wasSaved=false;
		}

		public void insertUpdate(DocumentEvent e) {
			wasSaved=false;
		}

		public void removeUpdate(DocumentEvent e) {
			wasSaved=false;
		}
		
	});
	
}

public void show(){
	init();
	addEventHandler();
	jf.pack();
	jf.setVisible(true);
	jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}

public static void main(String[] args) {
	new TestJMenuBar().show();
}

public void actionPerformed(ActionEvent e) {
	String cmd=e.getActionCommand();
	
	if("退出".equals(cmd)){
		if(false==wasSaved){
			int op=JOptionPane.showConfirmDialog(jf, "文件没有保存是否退出?","确认退出",JOptionPane.YES_NO_CANCEL_OPTION);
			if(op!=JOptionPane.YES_OPTION){
				return;
			}
		}
		
		System.exit(0);
	}
	
	if("打开".equals(cmd)){
		//文件选择器
		FileDialog fd=new FileDialog(jf,"打开",FileDialog.LOAD);
		fd.setVisible(true);
		

		if(fd.getFile()==null){
			return;
		}
		
		//文件路径为fd.getDirectory()+fd.getFile();
		filePath=fd.getDirectory()+fd.getFile();
		//只读utf-8编码的文本文件
		//逐行读
		//读一行,往文本域中写一行 文本域.append();
		BufferedReader br=null;
		try {
			br=new BufferedReader(
					new InputStreamReader(
							new FileInputStream(filePath),"utf-8"));
			
			String s=null;
			while((s=br.readLine())!=null){
				jta.append(s+"\n");
			}
			
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			if(br!=null){
				try {
					br.close();
				} catch (IOException ex) {
					ex.printStackTrace();
				}
			}
		}
		//wasSaved设置为true
		wasSaved=true;
	}
	
	if("另存为".equals(cmd)){
		FileDialog fd=new FileDialog(jf,"另存为",FileDialog.SAVE);
		fd.setVisible(true);
		if(fd.getFile()==null){
			return;
		}
		filePath=fd.getDirectory()+fd.getFile();
		
		save();
	}
	
	if("保存".equals(cmd)){
		//如果filePath为null,表示新打开的记事本
		if(filePath==null){
			//通过FileDialog获得filePath
			FileDialog fd=new FileDialog(jf,"另存为",FileDialog.SAVE);
			fd.setVisible(true);
			if(fd.getFile()==null){
				return;
			}
			filePath=fd.getDirectory()+fd.getFile();
		}
		//将文本内容保存到filePath中
		//wasSaved设置为true
		save();
	}
	
}

private void save() {
	PrintWriter pw=null;
	try {
		pw=new PrintWriter(filePath,"utf-8");
		
		pw.print(jta.getText());
	} catch (Exception ex) {
		ex.printStackTrace();
	} finally {
		if(pw!=null){
			pw.close();
		}
	}
	wasSaved=true;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值