package editor1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.io.*;
import javax.swing.event.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class TextEditor1
extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenu1 = new JMenu();
JMenuItem jMenuItem1 = new JMenuItem();
JMenuItem jMenuItem2 = new JMenuItem();
JMenuItem jMenuItem3 = new JMenuItem();
JMenuItem jMenuItem4 = new JMenuItem();
JMenuItem jMenuItem5 = new JMenuItem();
JLabel jLabel1 = new JLabel();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
String filename; //文件名
boolean isSaved = false; //文件是否已改动并保存
Document document; //文档对象
JFileChooser jFileChooser1 = new JFileChooser(); //文件选择器
//Construct the frame
public TextEditor1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel)this.getContentPane();
contentPane.setLayout(borderLayout1);
document = jTextArea1.getDocument();
this.setSize(new Dimension(400, 300));
this.setTitle("记事本");
jMenu1.setText("文件");
jMenuItem1.setText("新建");
jMenuItem1.addActionListener(new TextEditor1_jMenuItem1_actionAdapter(this));
jMenuItem2.setText("打开");
jMenuItem2.addActionListener(new TextEditor1_jMenuItem2_actionAdapter(this));
jMenuItem3.setText("保存");
jMenuItem3.addActionListener(new TextEditor1_jMenuItem3_actionAdapter(this));
jMenuItem4.setText("另存为");
jMenuItem4.addActionListener(new TextEditor1_jMenuItem4_actionAdapter(this));
jMenuItem5.setText("退出");
jMenuItem5.addActionListener(new TextEditor1_jMenuItem5_actionAdapter(this));
jTextArea1.setText("");
jLabel1.setToolTipText("");
jLabel1.setText(" ");
document.addDocumentListener(new TextEditor1_document_documentAdapter(this));
jMenuBar1.add(jMenu1);
jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2);
jMenu1.add(jMenuItem3);
jMenu1.add(jMenuItem4);
jMenu1.addSeparator();
jMenu1.add(jMenuItem5);
contentPane.add(jLabel1, BorderLayout.SOUTH);
contentPane.add(jScrollPane1, BorderLayout.CENTER);
jScrollPane1.getViewport().add(jTextArea1, null);
this.setJMenuBar(jMenuBar1);
}
//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public void newFile() { //创建新的文本文件
if (toExit()) {
jTextArea1.setText("");
filename = null;
isSaved = false;
updateFileName();
jLabel1.setText("新建文件:" + filename);
}
}
boolean save() { //保存文件
if (filename == null) { //如果文件名为空,则调用saveAs()方法
return saveAs();
}
try {
File file = new File(filename); //新建文件对象
FileWriter out = new FileWriter(file);
String text = jTextArea1.getText();
out.write(text); //写文件
out.close();
this.isSaved = false; //将文件状态设为已保存
jLabel1.setText("保存文件:" + filename);
updateFileName(); //更新文件标题
return true;
}
catch (Exception e) {
jLabel1.setText("错误" + e);
}
return false;
}
boolean saveAs() { //文件另存为
if (JFileChooser.APPROVE_OPTION == jFileChooser1.showSaveDialog(this)) {
filename = jFileChooser1.getSelectedFile().getPath(); //获得文件路径
return save(); //调用save()方法保存文件
}
else {
return false;
}
}
void updateFileName() { //更新标题文件名
String str;
if (filename == null) { //如果文件名为空,则标题名为Untitled
str = "Untitled";
}
else {
str = filename;
}
if (isSaved) {
str = "记事本-" + str;
}
this.setTitle(str); //设置标题名
this.repaint();
}
boolean toExit() { //是否能关闭当前文件
if (!isSaved) { //如果文件没有改变则返回true
return true;
}
int i = JOptionPane.showConfirmDialog(this, "是否保存文档?", "记事本",
JOptionPane.YES_NO_CANCEL_OPTION);
switch (i) {
case JOptionPane.YES_OPTION: //如选择yes,则保存文件
return save();
case JOptionPane.NO_OPTION: //选择no,则不保存文件,退出
return true;
case JOptionPane.CANCEL_OPTION: //选择cancel,则退回原理状态
return false;
default:
return false;
}
}
void openFile() { //打开文件
if (!toExit()) { //检查是否能关闭现在的文件
return;
}
if (JFileChooser.APPROVE_OPTION == jFileChooser1.showOpenDialog(this)) {
try {
String filename1 = jFileChooser1.getSelectedFile().getPath(); //获取文件路径
File file = new File(filename1); //建立文件对象
int size = (int) file.length(); //获取文件长度
char[] data = new char[size]; //建立缓冲区
FileReader in = new FileReader(file);
int readChar = 0;
while (in.ready()) { //读文件
readChar = readChar + in.read(data, readChar, size - readChar);
}
in.close();
String str = new String(data, 0, readChar);
jTextArea1.setText(str); //设置文本域的内容
filename = filename1;
isSaved = false;
jLabel1.setText("打开文件:" + filename);
updateFileName(); //更新文件标题
}
catch (Exception err) {
jLabel1.setText("错误:" + err);
}
}
this.repaint();
}
void jMenuItem1_actionPerformed(ActionEvent e) {
newFile(); //创建新文件
}
void jMenuItem2_actionPerformed(ActionEvent e) {
openFile(); //打开文件
}
void jMenuItem3_actionPerformed(ActionEvent e) {
save(); //保存文件
}
void jMenuItem4_actionPerformed(ActionEvent e) {
saveAs(); //文件另存为
}
void jMenuItem5_actionPerformed(ActionEvent e) {
if (toExit()) { //检查文件状态,然后退出
System.exit(0);
}
}
void document_changedUpdate(DocumentEvent e) {
if (!isSaved) {
isSaved = true; //设置文件已改动
updateFileName(); //设置文件标题
}
}
void document_insertUpdate(DocumentEvent e) {
if (!isSaved) {
isSaved = true; //设置文件已改动
updateFileName(); //设置文件标题
}
}
void document_removeUpdate(DocumentEvent e) {
if (!isSaved) {
isSaved = true; //设置文件已改动
updateFileName(); //设置文件标题
}
}
}
class TextEditor1_jMenuItem1_actionAdapter
implements java.awt.event.ActionListener {
TextEditor1 adaptee;
TextEditor1_jMenuItem1_actionAdapter(TextEditor1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuItem1_actionPerformed(e);
}
}
class TextEditor1_jMenuItem2_actionAdapter
implements java.awt.event.ActionListener {
TextEditor1 adaptee;
TextEditor1_jMenuItem2_actionAdapter(TextEditor1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuItem2_actionPerformed(e);
}
}
class TextEditor1_jMenuItem3_actionAdapter
implements java.awt.event.ActionListener {
TextEditor1 adaptee;
TextEditor1_jMenuItem3_actionAdapter(TextEditor1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuItem3_actionPerformed(e);
}
}
class TextEditor