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

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("记事本");
    }
    
}


 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值