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); } }