Java 记事本

Written by Robert_Wang in Southwest University of Science And Technology.

一个简单的记事本:


package test5;

import java.awt.EventQueue;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollBar;
import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.awt.event.ActionEvent;

public class Notepad {

	private JFrame frame;

	private String oldText = "";// 用来保存旧的文本,便于比较文本是否改动

	private boolean isNewFile = true;// 是否是新文件

	private File currentFile;// 当前文件

	private String filepath;// 获取文件路径

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Notepad window = new Notepad();
					window.frame.setSize(1000,800);	
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Notepad() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setTitle("无标题-记事本");
		JScrollPane scrollPane = new JScrollPane();
		frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

		JTextArea textArea = new JTextArea();
		scrollPane.setViewportView(textArea);

		JMenuBar menuBar = new JMenuBar();
		scrollPane.setColumnHeaderView(menuBar);

		JMenu mnNewMenu_file = new JMenu("\u6587\u4EF6(F)");
		menuBar.add(mnNewMenu_file);

		// 新建
		JMenuItem newfile = new JMenuItem("\u65B0\u5EFA(N)");
		newfile.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				textArea.requestFocus();
				// 标签用于指定屏幕内的焦点View。
				String currentText = textArea.getText();
				// 比较文本是否发生改变
				boolean isTextChanged = currentText.equals(oldText) ? false : true;
				if (isTextChanged) {
					// 保留选择的结果,为后面的结果处理做准备
					int savechoose = JOptionPane.showConfirmDialog(null, "您的文件未保存,是否需要保存?", "提示",
							JOptionPane.YES_NO_CANCEL_OPTION);
					if (savechoose == JOptionPane.YES_OPTION) {
						JFileChooser jfc = new JFileChooser();
						// 设置文件选择为全选
						jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
						// 设置对话框标题
						jfc.setDialogTitle("另存为");
						// 文件保存对话框
						int result = jfc.showSaveDialog(null);
						// 取消操作直接return
						if (result == JFileChooser.CANCEL_OPTION)
							return;
						// else ...返回选中的文件
						File saveFile = jfc.getSelectedFile();
						// 检查文件名是否合法
						// 如果不合法
						if (saveFile == null || saveFile.getName().equals("")) {
							JOptionPane.showMessageDialog(null, "文件名不合法", "文件名不合法", JOptionPane.ERROR_MESSAGE);
						} else {
							// 合法:文本读入文件
							try {
								// 文件写入
								FileWriter fw = new FileWriter(saveFile);
								// 文件封装
								BufferedWriter bw = new BufferedWriter(fw);
								// 写入文件
								bw.write(textArea.getText(), 0, textArea.getText().length());
								// 刷新 -- 关闭
								bw.flush();
								bw.close();
								// 保存了该文件,代表该文件是一个新文件
								isNewFile = true;
								// 获取文件呢路径名字
								filepath = saveFile.getPath();
								// 如果文件后缀名不是txt,则改为txt
								if (!filepath.toUpperCase().endsWith("TXT")) {
									filepath += ".txt";
									File newfile = new File(filepath);
									saveFile.renameTo(newfile);

								}
								// 当前文件即为保存的文件
								currentFile = saveFile;
								// frame.setTitle(saveFile.getName()+"记事本");
								oldText = textArea.getText();

							} catch (Exception e2) {
								// TODO: handle exception
							}
						}
					} else if (savechoose == JOptionPane.NO_OPTION) {
						// 如果不保存,直接清空文本
						textArea.setText("");
						isNewFile = true;
						oldText = textArea.getText();
					} else if (savechoose == JOptionPane.CANCEL_OPTION) {
						// 取消操作什么也不做
						return;
					}
				} else {
					// 文本没有改变,代表这是一个新文件
					isNewFile = true;

				}
			}
		});
		mnNewMenu_file.add(newfile);

		// 打开
		JMenuItem openfile = new JMenuItem("\u6253\u5F00(O)");
		openfile.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String currentText = textArea.getText();
				// 比较文本是否发生改变
				isNewFile = false;
				boolean isTextChanged = currentText.equals(oldText) ? false : true;
				if (isTextChanged) {
					// 保留选择的结果,为后面的结果处理做准备
					int savechoose = JOptionPane.showConfirmDialog(null, "您的文件未保存,是否需要保存?", "提示",
							JOptionPane.YES_NO_CANCEL_OPTION);
					if (savechoose == JOptionPane.YES_OPTION) {
						JFileChooser jfc = new JFileChooser();
						// 设置文件选择为全选
						jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
						// 设置对话框标题
						jfc.setDialogTitle("另存为");
						// 文件保存对话框
						int result = jfc.showSaveDialog(null);
						// 取消操作直接return
						if (result == JFileChooser.CANCEL_OPTION)
							return;
						// else ...返回选中的文件
						File saveFile = jfc.getSelectedFile();
						// 检查文件名是否合法
						// 如果不合法
						if (saveFile == null || saveFile.getName().equals("")) {
							JOptionPane.showMessageDialog(null, "文件名不合法", "文件名不合法", JOptionPane.ERROR_MESSAGE);
						} else {
							// 合法:文本读入文件
							try {
								// 文件写入
								FileWriter fw = new FileWriter(saveFile);
								// 文件封装
								BufferedWriter bw = new BufferedWriter(fw);
								// 写入文件
								bw.write(textArea.getText(), 0, textArea.getText().length());
								// 刷新 -- 关闭
								bw.flush();
								bw.close();
								// 打开了该文件,代表该文件不是一个新文件
								// isNewFile = false;

								// 当前文件即为保存的文件
								currentFile = saveFile;
								// frame.setTitle(saveFile.getName()+"记事本");
								oldText = textArea.getText();

							} catch (Exception e2) {
								// TODO: handle exception
							}
						}
					} else if (savechoose == JOptionPane.NO_OPTION) {
						// 如果不保存,直接清空文本
						textArea.setText("");
						isNewFile = true;
						oldText = textArea.getText();
					} else if (savechoose == JOptionPane.CANCEL_OPTION) {
						// 取消操作什么也不做
						return;
					}
				} else {

					// 打开文件
					JFileChooser jfc = new JFileChooser();
					jfc.setDialogTitle("打开文件");
					jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
					int result = jfc.showOpenDialog(null);
					if (result == JFileChooser.CANCEL_OPTION)
						return;
					File openfile = jfc.getSelectedFile();
					if (openfile == null || openfile.getName().equals("")) {
						JOptionPane.showMessageDialog(null, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
					} else {
						// 文件读出操作
						try {
							FileReader fr = new FileReader(openfile);
							BufferedReader bfr = new BufferedReader(fr);
							// 按行读出
							String str;
							while ((str = bfr.readLine()) != null) {
								textArea.append(str);
							}
							bfr.close();
							fr.close();
							// isNewFile = true;
							currentFile = openfile;
							oldText = textArea.getText();
						} catch (Exception e2) {
							// TODO: handle exception
						}
					}
				}
			}
		});
		mnNewMenu_file.add(openfile);

		// 保存
		JMenuItem save = new JMenuItem("\u4FDD\u5B58(S)");
		save.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (isNewFile) {
					JFileChooser jfc = new JFileChooser();
					jfc.setDialogTitle("保存到");
					jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
					int result = jfc.showSaveDialog(null);
					if (result == JFileChooser.CANCEL_OPTION) {
						return;
					} else {
						File savefile = jfc.getSelectedFile();
						FileWriter fw;
						try {
							fw = new FileWriter(savefile);
							BufferedWriter bfw = new BufferedWriter(fw);
							bfw.write(textArea.getText(), 0, textArea.getText().length());
							bfw.flush();
							bfw.close();
							// 由于是将新文件保存了,所以该文件不是新文件了
							isNewFile = false;
							currentFile = savefile;
							oldText = textArea.getText();
						} catch (IOException e1) {

							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					}

				} else {
					try {
						FileWriter fw = new FileWriter(currentFile);
						BufferedWriter bfw = new BufferedWriter(fw);
						bfw.write(textArea.getText(), 0, textArea.getText().length());
						bfw.flush();
						fw.close();
					} catch (IOException e1) {
						e1.printStackTrace();
					}
				}
			}
		});
		mnNewMenu_file.add(save);
		//退出
		JMenuItem exit = new JMenuItem("\u9000\u51FA(X)");
		exit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String currentText = textArea.getText();
				boolean isTextChanged = currentText.equals(oldText) ? false : true;
				if (isTextChanged) {
					int resul = JOptionPane.showConfirmDialog(null, "文件未保存,是否保存?", "提示", JOptionPane.OK_CANCEL_OPTION);
					if (resul == JOptionPane.OK_OPTION) {
						JFileChooser jfc = new JFileChooser();
						// 设置文件选择为全选
						jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
						// 设置对话框标题
						jfc.setDialogTitle("另存为");
						// 文件保存对话框
						int result = jfc.showSaveDialog(null);
						// 取消操作直接return
						if (result == JFileChooser.CANCEL_OPTION)
							return;
						// else ...返回选中的文件
						File saveFile = jfc.getSelectedFile();
						// 检查文件名是否合法
						// 如果不合法
						if (saveFile == null || saveFile.getName().equals("")) {
							JOptionPane.showMessageDialog(null, "文件名不合法", "文件名不合法", JOptionPane.ERROR_MESSAGE);
						} else {
							// 合法:文本读入文件
							try {
								// 文件写入
								FileWriter fw = new FileWriter(saveFile);
								// 文件封装
								BufferedWriter bw = new BufferedWriter(fw);
								// 写入文件
								bw.write(textArea.getText(), 0, textArea.getText().length());
								// 刷新 -- 关闭
								bw.flush();
								bw.close();
								// 打开了该文件,代表该文件不是一个新文件
								// isNewFile = false;

								// 当前文件即为保存的文件
								currentFile = saveFile;
								// frame.setTitle(saveFile.getName()+"记事本");
								oldText = textArea.getText();

							} catch (Exception e2) {
								// TODO: handle exception
							}
						}
					}
					else System.exit(0);
				} else {
					int resu = JOptionPane.showConfirmDialog(null, "确定要退出?","提示",JOptionPane.OK_CANCEL_OPTION);
					if(resu == JOptionPane.OK_OPTION) System.exit(0);
					else System.exit(0);
				}
			}
		});
		mnNewMenu_file.add(exit);

		JMenu mnNewMenu_edit = new JMenu("\u7F16\u8F91(E)");
		menuBar.add(mnNewMenu_edit);

		JMenu mnNewMenu_format = new JMenu("\u683C\u5F0F(O)");
		menuBar.add(mnNewMenu_format);

		JMenu mnNewMenu_view = new JMenu("\u67E5\u770B(V)");
		menuBar.add(mnNewMenu_view);

		JMenu mnNewMenu_help = new JMenu("\u5E2E\u52A9(H)");
		menuBar.add(mnNewMenu_help);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40883132/article/details/80455531