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