简单记事本的实现(swing技术)

来源:互联网 发布:皮蓬季后赛数据 编辑:程序博客网 时间:2024/05/17 22:34
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("记事本");    }    }