package homework;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class Notepad extends JFrame implements ActionListener
{
//记事本中,显示信息的文本框
private JTextArea jtaText = new JTextArea();
//记录打开的文件的所在位置
private String filename = null;
public Notepad(String name)
{
//指定窗口的名称
super(name);
//实现记事本中的菜单
//创建一个菜单栏对象
JMenuBar bar = new JMenuBar();
//创建菜单
JMenu file = new JMenu("文件");
JMenu help = new JMenu("帮助");
//创建菜单项并注册每项的监听
JMenuItem file_new = new JMenuItem("新建");
file_new.addActionListener(this);
JMenuItem file_open = new JMenuItem("打开");
file_open.addActionListener(this);
JMenuItem file_save = new JMenuItem("保存");
file_save.addActionListener(this);
JMenuItem file_saveas = new JMenuItem("另存为");
file_saveas.addActionListener(this);
JMenuItem file_exit = new JMenuItem("退出");
file_exit.addActionListener(this);
JMenuItem help_about = new JMenuItem("关于");
help_about.addActionListener(this);
//将菜单项添加到菜单中
file.add(file_new);
file.add(file_open);
file.add(file_save);
file.add(file_saveas);
file.addSeparator();//添加分隔符
file.add(file_exit);
help.add(help_about);
//将菜单添加到菜单栏
bar.add(file);
JSeparator sep = new JSeparator(SwingConstants.VERTICAL);//定义一个垂直的分隔符
bar.add(help);
bar.add(sep);//将分隔符添加
//将菜单栏添加到窗体中
this.setJMenuBar(bar);
//获得窗体的默认容器
Container c = this.getContentPane();
//默认该容器是BordLayout布局管理
c.add(jtaText);
//设置窗体的大小
this.setSize(800, 600);
//获得屏幕的信息
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
//设置窗体启动,初始位置为屏幕中间
this.setLocation(((int)dim.getWidth() - 800)/2, ((int)dim.getHeight() - 600)/2);
//实现窗体关闭按钮
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体可见
this.setVisible(true);
}
/**
* 事件处理
* 重写方法
* @param e 发生事件时,自动生成的事件对象
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent e)
{
//得到事件源的名称
String command = e.getActionCommand();
if("新建".equals(command))
{
//相当于清空显示框
this.jtaText.setText("");
}
else if("打开".equals(command))
{
//创建一个文件选择器对象
JFileChooser jfc = new JFileChooser();
//显示文件选择器,选择文件。如果选择了打开,则返回,该对话框的父组件为this
int flag = jfc.showOpenDialog(this);
if(flag == JFileChooser.APPROVE_OPTION)
{
//获得选择的文件,返回选中的文件
File f = jfc.getSelectedFile();
//得到选择的文件的绝对路径
filename = f.getAbsolutePath();
//读取文件的内容,放入显示框
FileReader fr = null;
BufferedReader br = null;
try
{
fr = new FileReader(f);
br = new BufferedReader(fr);
//暂时存放读取的文件的内容
StringBuffer sb = new StringBuffer();
String str = "";
while((str = br.readLine()) != null)
{
sb.append(str);
sb.append("\n");
}
//将读取的信息放入文本显示区域
this.jtaText.setText(sb.toString());
//标题栏显示文件的绝对路径
this.setTitle("记事本" + filename);
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
catch (IOException e2)
{
e2.printStackTrace();
}
finally
{
try
{
br.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}
}
else if("保存".equals(command))
{
try
{
save(filename);
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
else if("另存为".equals(command))
{
//创建一个文件选择器对象
JFileChooser jfc = new JFileChooser();
//显示文件选择器,选择文件。如果选择了保存,则返回,该对话框的父组件为this
int flag = jfc.showSaveDialog(this);
if(flag == JFileChooser.APPROVE_OPTION)
{
File f = jfc.getSelectedFile();
//写入文件
try
{
save(f.getAbsolutePath());
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}
else if("退出".equals(command))
{
//JOptionPane 有助于方便地弹出要求用户提供值或向其发出通知的标准对话框。
int flag = JOptionPane.showConfirmDialog(this, "确定要退出吗?");
if(JOptionPane.YES_OPTION == flag)
{
//保存
try
{
save(filename);
}
catch (IOException e1)
{
e1.printStackTrace();
}
this.dispose();
System.exit(0);
}
else if(JOptionPane.NO_OPTION == flag)
{
this.dispose();
System.exit(0);
}
else if(JOptionPane.CANCEL_OPTION == flag)
{
return;
}
}
else if("关于".equals(command))
{
final JDialog dialog = new JDialog(this, "关于", true);
dialog.setSize(400, 80);
JLabel lbl = new JLabel("记事本程序 - 作者:jack");
lbl.setFont(new Font("Default", Font.BOLD, 28));
dialog.add(lbl);
dialog.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
dialog.dispose();
// System.exit(0);
}
});
dialog.setVisible(true);
}
}
/**
* 实现保存的方法
* <一句话功能简述>
* <功能详细描述>
* @throws IOException
* @see [类、类#方法、类#成员]
*/
private void save(String filename) throws IOException
{
if(filename != null)
{
//创建文件对象 ,用于写入字符流对象,带缓冲区的字符输出流对象
File f = new File(filename);
FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter pw = null;
fw = new FileWriter(f);
bw = new BufferedWriter(fw);
//实例化打印流,指向系统中一个具体的文件
pw = new PrintWriter(bw);
pw.print(this.jtaText.getText());
pw.flush();
pw.close();
}
}
public static void main(String[] args)
{
new Notepad("记事本");
}
}