记事本代码(部分未完成)

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;

public class Notepad extends JFrame{
    JMenuItem newFile,open,save,saveAs,exit;
    JMenuItem revocation,cut,copy,paste,delete,find,findNext,replace,date;
    JMenuItem script;
    JMenuItem zhuangTai;
    JMenuItem zhuTi,helpZhuTi;
   
    JTextArea jta;
    JScrollPane jsp;
    JFileChooser fileChooser;
    JPopupMenu popUpMenu;
    JButton jb,jb1;
    JTextField jt,jt1;
    JLabel stateBar;
    int i = 0;
    int u = 0;
    //构造方法
    public Notepad() {
        super("新建文本文件");
        this.setLocation(300,150);
        this.setSize(600,500);
        myFrame();
        this.setVisible(true);
    }
    public void myFrame() {
        //文本编辑区域
        jta = new JTextArea();
        jta.setFont(new Font("宋体",Font.PLAIN,16)); //设置默认字体
        jta.setLineWrap(true);
        jta.setDragEnabled(true);
        jsp = new JScrollPane(jta);  
       
        fileChooser = new JFileChooser();
       
        JMenuBar jmb = new JMenuBar();
        JMenu file = new JMenu("文件(F)");
        JMenu edit = new JMenu("编辑(E)");
        JMenu form = new JMenu("格式(O)");
        JMenu check = new JMenu("查看(V)");
        JMenu help = new JMenu("帮助(H)");
       
        newFile = new JMenuItem("新建(N)   Ctrl+N");
        open = new JMenuItem("打开(O)   Ctrl+O");
        //设置快捷键
        open.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_O,
                        InputEvent.CTRL_MASK));
        save = new JMenuItem("保存(S)   Ctrl+S");
        save.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_S,
                        InputEvent.CTRL_MASK));
        saveAs = new JMenuItem("另存为(A)...");
        exit = new JMenuItem("退出(Q)");
        exit.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_Q,
                        InputEvent.CTRL_MASK));
        newFile.addActionListener( //新建文件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        newFiles();
                    }
                });
        exit.addActionListener( //退出选项事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        closeFile();
                    }
                });
        save.addActionListener( //保存事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        saveFile();
                    }
                });
        saveAs.addActionListener( //另存为事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        saveFileAs();
                    }
                });
        open.addActionListener( //打开事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        openFile();
                    }
                });
        file.add(newFile);
        file.add(open);
        file.add(save);
        file.add(saveAs);
        file.addSeparator(); // 设置横线
        file.add(exit); 
        revocation = new JMenuItem("撤销");
        revocation.setEnabled(false);
        cut = new JMenuItem("剪切");
        cut.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_X,
                        InputEvent.CTRL_MASK));
        copy = new JMenuItem("复制");
        copy.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_C,
                        InputEvent.CTRL_MASK));
        paste = new JMenuItem("黏贴");
        paste.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_V,
                        InputEvent.CTRL_MASK));
        delete = new JMenuItem("删除");
        find = new JMenuItem("查找");
        find.setAccelerator(
                KeyStroke.getKeyStroke(
                        KeyEvent.VK_F,
                        InputEvent.CTRL_MASK));
        findNext = new JMenuItem("查找下一个");
        replace = new JMenuItem("替换");
        date = new JMenuItem("时间/日期");
        findNext.setEnabled(false);
        replace.setEnabled(false);
        cut.addActionListener( //剪切事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        cut();
                    }
                });
        copy.addActionListener( //copy事件
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        copy();
                    }
                });
        paste.addActionListener( //黏贴事件
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    paste();
                }
            });
        delete.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        jta.setText("");
                    }
                });
        date.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        nowDate();
                    }
                });
        find.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        onFind();
                    }
                });
        edit.add(revocation);
        edit.addSeparator();
        edit.add(cut);
        edit.add(copy);
        edit.add(paste);
        edit.add(delete);
        edit.addSeparator();
        edit.add(find);
        edit.add(findNext);
        edit.add(replace);
        edit.addSeparator();
        edit.add(date);
       
        // 编辑区键盘事件
        jta.addKeyListener(
            new KeyAdapter() {
                public void keyTyped(KeyEvent e) {
                    processTextArea();
                }
            }
        );
        // 编辑区鼠标事件
        jta.addMouseListener(
            new MouseAdapter() {
                public void mouseReleased(MouseEvent e) {
                    if(e.getButton() == MouseEvent.BUTTON3)
                        popUpMenu.show(jta, e.getX(), e.getY());
                }
               
                public void mouseClicked(MouseEvent e) {
                    if(e.getButton() == MouseEvent.BUTTON1)
                        popUpMenu.setVisible(false);
                }
            }
        ); 
       
        script = new JMenuItem("字体");
        script.setEnabled(false);
        form.add(script);
       
        zhuangTai = new JMenuItem("状态栏");
        zhuangTai.setEnabled(false);
        check.add(zhuangTai);
       
        zhuTi = new JMenuItem("帮助主题");
        zhuTi.setEnabled(false);
        helpZhuTi = new JMenuItem("关于主题");
        help.add(zhuTi);
        help.addSeparator();
        help.add(helpZhuTi);
        helpZhuTi.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        zhuTi();
                    }
                });
       
        jmb.add(file);
        jmb.add(edit);
        jmb.add(form);
        jmb.add(check);
        jmb.add(help);
       
        // 状态栏
        stateBar = new JLabel("未修改");
        stateBar.setHorizontalAlignment(SwingConstants.RIGHT);
        stateBar.setBorder(
                BorderFactory.createEtchedBorder());
       
        popUpMenu = edit.getPopupMenu();
        
        this.setLayout(new BorderLayout());
        this.add(jmb,BorderLayout.NORTH);
        this.add(jsp,BorderLayout.CENTER);
        this.add(stateBar, BorderLayout.SOUTH);
        this.addWindowListener(
                new WindowAdapter() {
                    public void windowClosing(WindowEvent e) {
                        closeFile();
                    }
                }
            );
    }
   
    //退出
    private void closeFile() {
        // 是否已保存文件
        if(!isCurrentFileSaved()) {
            // 释放窗口资源,而后关闭程序
            System.exit(1);
        }
        else {
            int option = JOptionPane.showConfirmDialog(
                    null, "文件已修改,是否保存?",
                    "保存文件?", JOptionPane.YES_NO_OPTION,
                    JOptionPane.WARNING_MESSAGE, null);

            switch(option) {
                case JOptionPane.YES_OPTION:
                    saveFile();
                    break;
                case JOptionPane.NO_OPTION:
                   System.exit(1);
            }
        }
    }
    //新建文件
    private void newFiles() {
        if(isCurrentFileSaved()) {
            saveFile();
        }
        stateBar.setText("未修改");
        jta.setText("");
    }
   
    //保存`
    private void saveFile() {
        //从标题栏取得文件名
        File file = new File(getTitle());
        //若指定文件不存在
        if(!file.exists()) {
            saveFileAs();
        } else {
            try {
                BufferedWriter buf = new BufferedWriter(new FileWriter(file));
                buf.write(jta.getText());
                buf.close();
                stateBar.setText("未修改");
            } catch (IOException e) {
                JOptionPane.showMessageDialog(null, e.toString(),
                        "写入文件失败",JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    //另存为
    private void saveFileAs() {
        //显示文件对话框
        int option = fileChooser.showSaveDialog(null);
        //确认要选取文件
        if(option == JFileChooser.APPROVE_OPTION) {
            //取得选取文件
            File ff = fileChooser.getSelectedFile();
            //在标题栏上设定文件名称
            setTitle(ff.toString());
            try {
                ff.createNewFile();
                saveFile();
            } catch (IOException e) {
                JOptionPane.showMessageDialog(null, e.toString(),
                        "无法新建文件",JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    //检查文件是否修改
    private boolean isCurrentFileSaved() {
        if(stateBar.getText().equals("未修改")) {
            return false;
        }
        else {
            return true;
        }
    }
    //打开文件
    private void openFile() {
        if(!isCurrentFileSaved()) {
            open();//打开
        }else {
            // 显示对话框
            int option = JOptionPane.showConfirmDialog(
                    null, "文件已修改,是否保存?",
                    "保存文件?", JOptionPane.YES_NO_OPTION,
                    JOptionPane.WARNING_MESSAGE, null);
            switch(option) {
                // 确认文件保存
                case JOptionPane.YES_OPTION:
                    saveFile(); // 保存文件
                     break;
               // 放弃文件保存
                case JOptionPane.NO_OPTION:
                    open();
                    break;
            }
        }
    }
   
    private void open() {
        // fileChooser 是 JFileChooser 的实例
        // 显示文件选取的对话框
        int option = fileChooser.showDialog(null, null);
           
        // 使用者按下确认键
        if(option == JFileChooser.APPROVE_OPTION) {
            try {
                // 开启选取的文件
                BufferedReader buf =
                    new BufferedReader(
                       new FileReader(
                         fileChooser.getSelectedFile()));

                // 设定文件标题
                setTitle(fileChooser.getSelectedFile().toString());
                // 清除前一次文件
                jta.setText("");
                // 设定状态栏
                stateBar.setText("未修改");
                // 取得系统相依的换行字符
                String lineSeparator = System.getProperty("line.separator");
                // 读取文件并附加至文字编辑区
                String text;
                while((text = buf.readLine()) != null) {
                    jta.append(text);
                    jta.append(lineSeparator);
                }

                buf.close();
            }  
            catch(IOException e) {
                JOptionPane.showMessageDialog(null, e.toString(),
                    "开启文件失败", JOptionPane.ERROR_MESSAGE);
            }
        }   
    }
    //设置日期
    private void nowDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        jta.append(sdf.format(new Date()));
    }
   
    private void cut() {
        jta.cut();
        stateBar.setText("已修改");
        popUpMenu.setVisible(false);
    }

    private void copy() {
        jta.copy();
        popUpMenu.setVisible(false);   
    }

    private void paste() {
        jta.paste();
        stateBar.setText("已修改");
        popUpMenu.setVisible(false);
    }

    private void processTextArea() {
            stateBar.setText("已修改");
    }
    private void onFind() {
         //查找替换对话框
        JDialog jd = new JDialog();
        jd.setTitle("查找/替换");
        JLabel jl1 = new JLabel("查找:");
        jl1.setBounds(34,10,30,20);
        JLabel jl2 = new JLabel("替换内容:");
        jl2.setBounds(10,40,80,20);
         jt = new JTextField(10);
        jt.setBounds(85,10,105,20);
         jt1 = new JTextField(10);
        jt1.setBounds(85,40,105,20);
        jb = new JButton("查找下一个");
        jb.setBounds(220,10,100,20);
        jb1 = new JButton("逐个替换");
        jb1.setBounds(220,40,100,20);
        jd.setLayout(null);
        jd.setBounds(500,300,350,150);
       
        jd.add(jl1);
        jd.add(jl2);
        jd.add(jt);
        jd.add(jt);
        jd.add(jt1);
        jd.add(jb);
        jd.add(jb1);
        jd.setVisible(true);
        jd.setResizable(false);
       
        //事件管理
        jb.addActionListener(new ActionListener(){ //查找功能
            public void actionPerformed(ActionEvent e) {
                    String s=jt.getText();
                    int x = jta.getText().indexOf(s,i);
                    if (x == -1) {
                        JOptionPane.showMessageDialog(null, "没找到 " + s);
                        i = 0;
                    } else {
                        jta.setSelectionStart(x);
                        jta.setSelectionEnd(x + s.length());
                        i = x + 1;
                    }
            }
            });
        jb1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String s=jt.getText();
                String s1=jt1.getText();
                int x = jta.getText().indexOf(s, u);
                if (x == -1) {
                    JOptionPane.showMessageDialog(null, "没找到 " + s);
                    u = 0;
                } else {
                    jta.setSelectionStart(x);
                    jta.setSelectionEnd(x + s.length());
                    jta.replaceSelection(s1);
                    jta.setSelectionStart(jta.getSelectionEnd()-s1.length());
                    jta.setSelectionEnd(jta.getSelectionEnd());
                    u = x + 1;
                }
            }
        });
    }
   
    //主题
    private void zhuTi() {
        JOptionPane.showMessageDialog(null, "该记事本是由xxx");
    }
   
    //主函数
    public static void main(String[] args) {
        new Notepad();
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值