java记事本简单功能的实现

java 记事本及其简单功能的实现其中包括保存、新建、等功能的实现。

import java.awt.*;  
import java.awt.event.*;  
import java.text.*;  
import java.util.*;  
import java.io.*;  
import javax.swing.undo.*;

import javafx.scene.input.InputEvent;
import javafx.scene.input.KeyEvent;

import javax.swing.border.*;  
import javax.swing.*;  
import javax.swing.text.*;  
import javax.swing.event.*;  
import java.awt.datatransfer.*;
import java.time.*;   
public class Mynote extends JFrame implements ActionListener,DocumentListener{
    JMenuBar bar;
    JMenu cai1,cai2,cai3,cai4,cai5,cai41;
    JMenuItem cai11,cai12,cai13,cai14,cai15,cai16,cai17,cai18,cai21,cai22,cai23,cai24,cai25,cai26,cai27,cai28,cai29,cai210,cai211,cai212,cai213,cai32,cai33,cai34,cai42,cai41_1,cai41_2,cai41_3,cai51,cai52,cai53,editMenu_Undo;
    JTextArea text;
    JPanel pa;
    JScrollPane jsc;
    FileReader fr;
    BufferedReader br;
    FileWriter fw,fw1;
    BufferedWriter bw,bw1,out;
    String str=null,oldValue;
    File dir,currentFile,bcwjm;//currentFile当前文件名
    JFileChooser jfc2;
    JLabel label;
    JCheckBoxMenuItem cai31;
    //右键菜单项
    JPopupMenu youcd;
    JMenuItem cx,jq,fz,zt,sc,qx;
    //系统剪切板
    Toolkit toolkit=Toolkit.getDefaultToolkit();  
    Clipboard clipBoard=toolkit.getSystemClipboard();
    //设置图标
    ImageIcon image;
    //撤销操作
    protected UndoManager undo=new UndoManager();
    protected UndoableEditListener undoHandler=new UndoHandler();
    //判断是否是新文件
    boolean isNewFile=true;
    int a=0,b=0;
    public Mynote() {
        initGUI();
        this.setBounds(500,300,600,400);
        this.setVisible(true);
        setDefaultCloseOperation(3);
        this.setTitle("霖霖的记事本");
        //改字体
        Font ft = new Font("华文楷体",Font.PLAIN,14);
        java.util.Enumeration keys = UIManager.getDefaults().keys();  
        while (keys.hasMoreElements()) {  
            Object key = keys.nextElement();  
            Object value = UIManager.get(key);  
            if (value instanceof javax.swing.plaf.FontUIResource) {  
                UIManager.put(key, ft);  
            }  
        }
        //撤销
        label = new JLabel("按F1查看帮助");
        this.add(label,BorderLayout.SOUTH);
        //添加左上角图片
        image = new ImageIcon("my.jfif");
        this.setIconImage(image.getImage());
        //添加窗口侦听器
        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                exitWindowChoose();
            }
        });
                
        checkMenuItemEnabled();
        text.requestFocus();
    }
    public void initGUI(){
        bar = new JMenuBar();
        cai1 = new JMenu("文件(F)");
        cai1.setMnemonic('F');//设置快捷键ALT+F
        cai2 = new JMenu("编辑(N)");
        cai2.setMnemonic('N');
        cai3 = new JMenu("格式(O)");
        cai3.setMnemonic('O');
        cai4 = new JMenu("查看(V)");
        cai4.setMnemonic('V');
        cai5 = new JMenu("帮助(H)");
        cai5.setMnemonic('H');

        cai11 = new JMenuItem("新建(N)");
        cai11.setAccelerator(KeyStroke.getKeyStroke(78,2));
        cai11.addActionListener(this);
        cai12 = new JMenuItem("新窗口(W)");
        cai12.addActionListener(this);
        cai13 = new JMenuItem("打开(O)");
        cai13.setAccelerator(KeyStroke.getKeyStroke(79,2));
        cai13.addActionListener(this);
        cai14 = new JMenuItem("保存(S)");
        cai14.setAccelerator(KeyStroke.getKeyStroke(83,2));
        cai14.addActionListener(this);
        cai15 = new JMenuItem("另存为(A)");
        cai15.addActionListener(this);
        cai16 = new JMenuItem("页面设置(U)");
        cai16.addActionListener(this);
        cai17 = new JMenuItem("打印(P)");
        cai17.addActionListener(this);
        cai18 = new JMenuItem("退出(X)");
        cai18.addActionListener(this);

        cai21 = new JMenuItem("撤销(U)");
        cai21.setAccelerator(KeyStroke.getKeyStroke(90,2));
        cai21.addActionListener(this);
        cai21.setEnabled(false);
        cai22 = new JMenuItem("剪切(T)");
        cai22.setAccelerator(KeyStroke.getKeyStroke(88,2));
        cai22.addActionListener(this);
        cai23 = new JMenuItem("复制(C)");
        cai23.setAccelerator(KeyStroke.getKeyStroke(67,2));
        cai23.addActionListener(this);
        cai24 = new JMenuItem("粘贴(P)");
        cai24.setAccelerator(KeyStroke.getKeyStroke(86,2));
        cai24.addActionListener(this);
        cai25 = new JMenuItem("删除(L)");
        cai25.setAccelerator(KeyStroke.getKeyStroke(127,0));
        cai25.addActionListener(this);
        cai26 = new JMenuItem("使用 Bing 搜索...");
        cai26.addActionListener(this);
        cai27 = new JMenuItem("查找(F)");
        cai27.addActionListener(this);
        cai28 = new JMenuItem("查找上一个(N)");
        cai28.addActionListener(this);
        cai29 = new JMenuItem("查找下一个(V)");
        cai29.addActionListener(this);
        cai210 = new JMenuItem("替换(R)...");
        cai210.addActionListener(this);
        cai211 = new JMenuItem("(转到G)...");
        cai211.addActionListener(this);
        cai212 = new JMenuItem("全选(A)");
        cai212.setAccelerator(KeyStroke.getKeyStroke(65, 2));
        cai212.addActionListener(this);
        cai213 = new JMenuItem("时间/日期(D)");
        cai213.setAccelerator(KeyStroke.getKeyStroke(116,0));
        cai213.addActionListener(this);

        cai31 = new JCheckBoxMenuItem("自动换行(W)");
        cai31.setMnemonic('W');
        cai31.setState(true);
        cai31.addActionListener(this);
        cai32 = new JMenuItem("字体(F)");
        cai32.addActionListener(this);
        cai33 = new JMenuItem("前景色");
        cai33.addActionListener(this);
        cai34 = new JMenuItem("背景色");
        cai34.addActionListener(this);

        cai41 = new JMenu("缩放(Z)");
        cai41.addActionListener(this);
        cai42 = new JMenuItem("状态栏(S)");
        cai42.addActionListener(this);
        cai41_1 = new JMenuItem("放大(I)");
        cai41_1.addActionListener(this);
        cai41_2 = new JMenuItem("缩小(O)");
        cai41_2.addActionListener(this);
        cai41_3 = new JMenuItem("恢复默认缩放(O)");
        cai41_3.addActionListener(this);

        cai51 = new JMenuItem("查看帮助(H)");
        cai51.setAccelerator(KeyStroke.getKeyStroke(112,0));
        cai51.addActionListener(this);
        cai52 = new JMenuItem("发送反馈(F)");
        cai52.addActionListener(this);
        cai53 = new JMenuItem("关于记事本(A)");
        cai53.addActionListener(this);

        cai1.add(cai11);
        cai1.add(cai12);
        cai1.add(cai13);
        cai1.add(cai14);
        cai1.add(cai15);
        cai1.add(cai16);
        cai1.add(cai17);
        cai1.add(cai18);

        cai2.add(cai21);
        cai2.add(cai22);
        cai2.add(cai23);
        cai2.add(cai24);
        cai2.add(cai25);
        cai2.add(cai26);
        cai2.add(cai27);
        cai2.add(cai28);
        cai2.add(cai29);
        cai2.add(cai210);
        cai2.add(cai211);
        cai2.add(cai212);
        cai2.add(cai213);

        cai3.add(cai31);
        cai3.add(cai32);
        cai3.add(cai33);
        cai3.add(cai34);

        
        cai41.add(cai41_1);
        cai41.add(cai41_2);
        cai41.add(cai41_3);
        cai4.add(cai41);
        cai4.add(cai42);

        cai5.add(cai51);
        cai5.add(cai52);
        cai5.add(cai53);
        bar.add(cai1);
        bar.add(cai2);
        bar.add(cai3);
        bar.add(cai4);
        bar.add(cai5);
        this.setJMenuBar(bar);

        text = new JTextArea(16,19);
        Font font = new Font("微软雅黑",Font.BOLD,20);
        text.setFont(font);
        text.setEnabled(true);

        //编辑区注册事件监听(与撤销操作有关)  
        text.getDocument().addUndoableEditListener(undoHandler);  
        text.getDocument().addDocumentListener(this);
        //创建右键菜单
        youcd = new JPopupMenu();  
        cx = new JMenuItem("撤销(U)");  
        jq = new JMenuItem("剪切(T)");  
        fz = new JMenuItem("复制(C)");  
        zt = new JMenuItem("粘帖(P)");  
        sc = new JMenuItem("删除(D)");  
        qx = new JMenuItem("全选(A)");
        
        cx.setEnabled(false);

        youcd.add(cx);  
        youcd.addSeparator();  
        youcd.add(jq);  
        youcd.add(fz);  
        youcd.add(zt);  
        youcd.add(sc);  
        youcd.addSeparator();  
        youcd.add(qx);

        cx.addActionListener(this);  
        jq.addActionListener(this);  
        fz.addActionListener(this);  
        zt.addActionListener(this);  
        sc.addActionListener(this);  
        qx.addActionListener(this);
        //创建编辑菜单及菜单项并注册事件监听 
        text.addMouseListener(new MouseAdapter()  
        {   public void mousePressed(MouseEvent e)  
            {   if(e.isPopupTrigger())//返回此鼠标事件是否为该平台的弹出菜单触发事件  
                {   youcd.show(e.getComponent(),e.getX(),e.getY());//在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单  
                }  
                checkMenuItemEnabled();//设置剪切,复制,粘帖,删除等功能的可用性  
                text.requestFocus();//编辑区获取焦点  
            }  
            public void mouseReleased(MouseEvent e)  
            {   if(e.isPopupTrigger())//返回此鼠标事件是否为该平台的弹出菜单触发事件  
                {   youcd.show(e.getComponent(),e.getX(),e.getY());//在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单  
                }  
                checkMenuItemEnabled();//设置剪切,复制,粘帖,删除等功能的可用性  
                text.requestFocus();//编辑区获取焦点  
            }  
        });
        pa = new JPanel();
        BorderLayout grid = new BorderLayout();
        pa.setLayout(grid);
        //设置光标可用性为true
        text.getCaret().setVisible(true);
        //设置光标位置为文本最后面
        text.setCaretPosition(text.getText().length()); 
        if(text.getText().equals("输入用户名")){
            text.setText("");
        }
        else//全选文本框
            text.selectAll();
        pa.add(text);
        //JScorllPane添加滚动条
        jsc = new JScrollPane(text);
        pa.add(jsc);
        //获取原文内容方便比较
        oldValue=text.getText();
        this.add(pa);
        cai2.addMenuListener(new MenuListener(){
            public void menuCanceled(MenuEvent e)//取消菜单时调用  
            {   checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性  
            }  
            public void menuDeselected(MenuEvent e)//取消选择某个菜单时调用  
            {   checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性  
            }  
            public void menuSelected(MenuEvent e)//选择某个菜单时调用  
            {   checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性  
            }  
        });
    }
    //设置复制、粘贴等功能的可用性
    public void checkMenuItemEnabled()  
    {   String selectText=text.getSelectedText();  
        if(selectText==null)  
        {   cai22.setEnabled(false);   
            cai23.setEnabled(false); 
            cai25.setEnabled(false); 
            fz.setEnabled(false);
            zt.setEnabled(false);
            jq.setEnabled(false);
        }  
        else  
        {   cai22.setEnabled(true);
            cai23.setEnabled(true);    
            cai25.setEnabled(true);
            fz.setEnabled(true);
            zt.setEnabled(true);
            jq.setEnabled(true);   
        }  
        //粘帖功能可用性判断  
        Transferable contents=clipBoard.getContents(this);  
        if(contents==null){
            cai24.setEnabled(false);
            zt.setEnabled(false);
        }   
        else  
        {   cai24.setEnabled(true);
            zt.setEnabled(true);
        }  
    }
    public void font()  
    {   final JDialog fontDialog=new JDialog(this,"字体设置",false);  
        Container con=fontDialog.getContentPane();  
        con.setLayout(new FlowLayout(FlowLayout.LEFT));  
        JLabel fontLabel=new JLabel("字体(F):");  
        fontLabel.setPreferredSize(new Dimension(100,20));//构造一个Dimension,并将其初始化为指定宽度和高度  
        JLabel styleLabel=new JLabel("字形(Y):");  
        styleLabel.setPreferredSize(new Dimension(100,20));  
        JLabel sizeLabel=new JLabel("大小(S):");  
        sizeLabel.setPreferredSize(new Dimension(100,20));  
        final JLabel sample=new JLabel("张选仲的记事本-ZXZ's Notepad");  
        //sample.setHorizontalAlignment(SwingConstants.CENTER);  
        final JTextField fontText=new JTextField(9);  
        fontText.setPreferredSize(new Dimension(200,20));  
        final JTextField styleText=new JTextField(8);  
        styleText.setPreferredSize(new Dimension(200,20));  
        final int style[]={Font.PLAIN,Font.BOLD,Font.ITALIC,Font.BOLD+Font.ITALIC};  
        final JTextField sizeText=new JTextField(5);  
        sizeText.setPreferredSize(new Dimension(200,20));  
        JButton okButton=new JButton("确定");  
        JButton cancel=new JButton("取消");  
        cancel.addActionListener(new ActionListener()  
        {   public void actionPerformed(ActionEvent e)  
            {   fontDialog.dispose();     
            }  
        });  
        Font currentFont=text.getFont();  
        fontText.setText(currentFont.getFontName());  
        fontText.selectAll();  
        //styleText.setText(currentFont.getStyle());  
        //styleText.selectAll();  
        if(currentFont.getStyle()==Font.PLAIN)  
            styleText.setText("常规");  
        else if(currentFont.getStyle()==Font.BOLD)  
            styleText.setText("粗体");  
        else if(currentFont.getStyle()==Font.ITALIC)  
            styleText.setText("斜体");  
        else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))  
            styleText.setText("粗斜体");  
        styleText.selectAll();  
        String str=String.valueOf(currentFont.getSize());  
        sizeText.setText(str);  
        sizeText.selectAll();  
        final JList fontList,styleList,sizeList;  
        GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();  
        final String fontName[]=ge.getAvailableFontFamilyNames();  
        fontList=new JList(fontName);  
        fontList.setFixedCellWidth(86);  
        fontList.setFixedCellHeight(20);  
        fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  
        final String fontStyle[]={"常规","粗体","斜体","粗斜体"};  
        styleList=new JList(fontStyle);  
        styleList.setFixedCellWidth(86);  
        styleList.setFixedCellHeight(20);  
        styleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  
        if(currentFont.getStyle()==Font.PLAIN)  
            styleList.setSelectedIndex(0);  
        else if(currentFont.getStyle()==Font.BOLD)  
            styleList.setSelectedIndex(1);  
        else if(currentFont.getStyle()==Font.ITALIC)  
            styleList.setSelectedIndex(2);  
        else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))  
            styleList.setSelectedIndex(3);  
        final String fontSize[]={"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"};  
        sizeList=new JList(fontSize);  
        sizeList.setFixedCellWidth(43);  
        sizeList.setFixedCellHeight(20);  
        sizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  
        fontList.addListSelectionListener(new ListSelectionListener()  
        {   public void valueChanged(ListSelectionEvent event)  
            {   fontText.setText(fontName[fontList.getSelectedIndex()]);  
                fontText.selectAll();  
                Font sampleFont1=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));  
                sample.setFont(sampleFont1);  
            }  
        });  
        styleList.addListSelectionListener(new ListSelectionListener()  
        {   public void valueChanged(ListSelectionEvent event)  
            {   int s=style[styleList.getSelectedIndex()];  
                styleText.setText(fontStyle[s]);  
                styleText.selectAll();  
                Font sampleFont2=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));  
                sample.setFont(sampleFont2);  
            }  
        });  
        sizeList.addListSelectionListener(new ListSelectionListener()  
        {   public void valueChanged(ListSelectionEvent event)  
            {   sizeText.setText(fontSize[sizeList.getSelectedIndex()]);  
                //sizeText.requestFocus();  
                sizeText.selectAll();     
                Font sampleFont3=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));  
                sample.setFont(sampleFont3);  
            }  
        });  
        okButton.addActionListener(new ActionListener()  
        {   public void actionPerformed(ActionEvent e)  
            {   Font okFont=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));  
                text.setFont(okFont);  
                fontDialog.dispose();  
            }  
        });  
        JPanel samplePanel=new JPanel();  
        samplePanel.setBorder(BorderFactory.createTitledBorder("示例"));  
        //samplePanel.setLayout(new FlowLayout(FlowLayout.CENTER));  
        samplePanel.add(sample);  
        JPanel panel1=new JPanel();  
        JPanel panel2=new JPanel();  
        JPanel panel3=new JPanel();  

        panel2.add(fontText);  
        panel2.add(styleText);  
        panel2.add(sizeText);  
        panel2.add(okButton);  
        panel3.add(new JScrollPane(fontList));//JList不支持直接滚动,所以要让JList作为JScrollPane的视口视图  
        panel3.add(new JScrollPane(styleList));  
        panel3.add(new JScrollPane(sizeList));  
        panel3.add(cancel);  
        con.add(panel1);  
        con.add(panel2);  
        con.add(panel3);  
        con.add(samplePanel);  
        fontDialog.setSize(350,340);  
        fontDialog.setLocation(200,200);  
        fontDialog.setResizable(false);  
        fontDialog.setVisible(true);  
    }
    public void exitWindowChoose()//关闭窗口时判断方法  
    {   text.requestFocus();  
        String str1=text.getText();  
        if(str1.equals(oldValue)==true)  
        {   System.exit(0);  
        }  
        else  
        {   int exitChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","退出提示",JOptionPane.YES_NO_CANCEL_OPTION);  
            if(exitChoose==JOptionPane.YES_OPTION)  
            {   //boolean isSave=false;  
                if(isNewFile)  
                {     
                    String str=null;  
                    JFileChooser fileChooser=new JFileChooser();  
                    fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);  
                    fileChooser.setApproveButtonText("确定");  
                    fileChooser.setDialogTitle("另存为");  
                    
                    int result=fileChooser.showSaveDialog(this);  
                    
                    if(result==JFileChooser.CANCEL_OPTION)  
                    {   label.setText(" 您没有保存文件");  
                        return;  
                    }                       
                    File saveFileName=fileChooser.getSelectedFile();  

                    if(saveFileName==null||saveFileName.getName().equals(""))  
                    {   JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);  
                    }  
                    else   
                    {   try  
                        {   FileWriter fw3=new FileWriter(saveFileName);  
                            BufferedWriter bw3=new BufferedWriter(fw3);  
                            bw3.write(text.getText(),0,text.getText().length());  
                            bw3.flush();  
                            fw3.close();  
                            
                            isNewFile=false;  
                            currentFile=saveFileName;  
                            oldValue=text.getText();  
                            
                            this.setTitle(saveFileName.getName()+"  - 记事本");  
                            label.setText(" 当前打开文件:"+saveFileName.getAbsoluteFile());  
                            //isSave=true;  
                        }                             
                        catch(IOException ioException){                   
                        }                 
                    }  
                }  
                else  
                {  
                    try  
                    {   FileWriter fw4=new FileWriter(currentFile);  
                        BufferedWriter bw4=new BufferedWriter(fw4);  
                        bw4.write(text.getText(),0,text.getText().length());  
                        bw4.flush();  
                        fw4.close();  
                        //isSave=true;  
                    }                             
                    catch(IOException ioException){                   
                    }  
                }  
                System.exit(0);  
                //if(isSave)System.exit(0);  
                //else return;  
            }  
            else if(exitChoose==JOptionPane.NO_OPTION)  
            {   System.exit(0);  
            }  
            else  
            {   return;  
            }  
        }
    }
    public void save(){//保存方法
        jfc2 = new JFileChooser();
        jfc2.setDialogTitle("另存为...");
        int state=jfc2.showSaveDialog(this);
        bcwjm=jfc2.getSelectedFile();//获取第一次保存文件夹的路径及原名
        if(state==JFileChooser.APPROVE_OPTION){
        try{
            dir=jfc2.getCurrentDirectory();
            str=jfc2.getSelectedFile().getName();
            File file = new File(dir,str);
            fw = new FileWriter(file);
            bw = new BufferedWriter(fw);
            bw.write(text.getText());
            bw.close();
            fw.close();
        }
        catch(IOException exp){}
        }
    }
    public void actionPerformed(ActionEvent e){
        String str=e.getActionCommand();
        if(str.equals("新建(N)")){
            
            text.requestFocus();//获取焦点
            String str1 = text.getText();
            boolean textIsChange = (str1.equals(oldValue))?false:true;//判断是否改变文件
            if(textIsChange){
                int saveChoose = JOptionPane.showConfirmDialog(this,"你的文件未保存","提示",JOptionPane.YES_NO_CANCEL_OPTION);
                if(saveChoose==JOptionPane.YES_OPTION){
                    String st=null;
                    JFileChooser file = new JFileChooser();
                    file.setFileSelectionMode(JFileChooser.FILES_ONLY);
                    file.setDialogTitle("另存为");
                    int result=file.showSaveDialog(this);  
                if(result==JFileChooser.CANCEL_OPTION){
                    label.setText("你没有选择文件");
                    return;
                }
                //获取保存文件名  
                File saveFileName=file.getSelectedFile();  
                if(saveFileName==null || saveFileName.getName().equals(""))  
                {   JOptionPane.showMessageDialog(this,"不合法文件名","不合法文件名",JOptionPane.ERROR_MESSAGE);  
                }  
                    else{
                        try  
                        {   FileWriter fw2=new FileWriter(saveFileName);  
                            BufferedWriter bw2=new BufferedWriter(fw2);  
                            bw2.write(text.getText(),0,text.getText().length());  
                            bw2.flush();//刷新该流的缓冲  
                            bw2.close();  
                            isNewFile=false;  
                            currentFile=saveFileName;  
                            oldValue=text.getText();  
                            this.setTitle(saveFileName.getName()+" - 记事本");  
                            label.setText("当前打开文件:"+saveFileName.getAbsoluteFile());  
                        }  
                        catch (IOException ioException)  
                        {  
                        }  
                    }  
                }  
                else if(saveChoose==JOptionPane.NO_OPTION)  
                {   text.replaceRange("",0,text.getText().length());  
                    label.setText("新建文件");
                    this.setTitle("无标题——记事本");  
                    isNewFile=true;  
                    undo.discardAllEdits(); //撤销所有已“撤销”的操作  
                    cai21.setEnabled(false);  
                    oldValue=text.getText();  
                }  
                else if(saveChoose==JOptionPane.CANCEL_OPTION){
                    return;  
                }  
            }  
            else  
            {   text.replaceRange("",0,text.getText().length());  
                label.setText(" 新建文件");  
                this.setTitle("无标题——记事本");  
                isNewFile=true;  
                undo.discardAllEdits();//撤销所有已“撤销”的操作  
                cai21.setEnabled(false);  
                oldValue=text.getText();  
            } 
        }
        else if(str.equals("新窗口(W)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("打开(O)")){
            this.setVisible(true);
            JFileChooser jfc1=new JFileChooser();
            jfc1.setDialogTitle("打开文件...");
			//默认方式
			jfc1.showOpenDialog(null);
			//显示
			jfc1.setVisible(true);
            
            //得到文件路径
			String filename=jfc1.getSelectedFile().getAbsolutePath();
            try{
                fr=new FileReader(filename);
				br=new BufferedReader(fr);
				//从文件中循环读取,并显示到text中
				String s="";
				String sus="";
				while((s=br.readLine())!=null)
				{
					//显示到text中
					sus+=s+"\r\n";
                }
                text.setText(sus);
            }
        catch(Exception e1){
            e1.printStackTrace();
        }
        finally 
			{
				try {
					fr.close();
					br.close();
				} catch (Exception e2) {
					e2.printStackTrace();
				}
				
			}
			
        }
        else if(str.equals("保存(S)")){
           /* //设置弹出对话框
			JFileChooser jfc2=new JFileChooser();
			jfc2.setDialogTitle("另存为...");
			//默认显示方式
			jfc2.showSaveDialog(null);
			jfc2.setVisible(true);
			
			//获取文件保存路径
			String filename2=jfc2.getSelectedFile().getAbsolutePath();
			//写人
			fw=null;
			bw=null;
			
			try {
				fw=new FileWriter(filename2);
				bw=new BufferedWriter(fw);
				bw.write(this.text.getText());
				
			} catch (Exception e3) {

				e3.printStackTrace();
			}
			finally
			{
				try {
                    bw.close();
                    fw.close();
                } catch (Exception e4) {
					e4.printStackTrace();
                }
            }
        }*/
        if(a==0&&b==0){
            save();
            a=1;
        }
        if(a==1&&b==1){
            try{
                //File file = new File(dir,str);
                fw1 = new FileWriter(bcwjm);
                bw1 = new BufferedWriter(fw1);
                bw1.write(text.getText());
                bw1.close();
                fw1.close();
                currentFile=bcwjm;
                oldValue=text.getText();
                this.setTitle(bcwjm.getName()+"记事本");
                label.setText("当前打开文件:"+bcwjm.getAbsoluteFile());
            }
            catch(IOException exp){}
        }
        b=1;
    }
        else if(str.equals("另存为(A)")){
            save();
        }
        else if(str.equals("页面设置(U)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚且无此功能");
        }
        else if(str.equals("打印(P)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("退出(X)")){
            System.exit(0);
            
        }
        else if(str.equals("撤销(U)")){
            text.requestFocus();
            if(undo.canUndo())  
            {   try  
                {   undo.undo();  
                }  
                catch (CannotUndoException ex)  
                {   System.out.println("Unable to undo:" + ex);  
                    //ex.printStackTrace();  
                }  
            }  
            if(!undo.canUndo())  
                {   editMenu_Undo.setEnabled(false);  
                }
        }
        else if(str.equals("剪切(T)")){
            text.cut();
        }
        else if(str.equals("复制(C)")){
            /*text.requestFocus();
            String str3=text.getSelectedText();  
            StringSelection selection=new StringSelection(str3);  
            clipBoard.setContents(selection,null);*/
            text.copy();
        }
        else if(str.equals("粘贴(P)")){
            text.paste();
        }
        else if(str.equals("删除(L)")){
            text.replaceSelection(null);
        }
        else if(str.equals("使用 Bing 搜索...")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }else if(str.equals("查找(F)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("查找上一个(N)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("查找下一个(V)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("替换(R)...")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("转到(G)...")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("全选(A)")){
            text.selectAll();
        }
        else if(str.equals("时间/日期(D)")){
            LocalDateTime date = LocalDateTime.now();
            text.setText(date.toString());
        }else if(str.equals("自动换行(W)")){
            if(cai31.getState())
                text.setLineWrap(true);
            else
                text.setLineWrap(false);
        }
        else if(str.equals("字体(F)")){
            text.requestFocus();
            font();
        }
        else if(str.equals("前景色")){
            Color newColor1 = JColorChooser.showDialog(this,"选择你所喜欢的前景颜色",text.getForeground());
            if(newColor1!=null){
                text.setForeground(newColor1);
            }
        }
        else if(str.equals("背景色")){       
            Color newColor = JColorChooser.showDialog(this,"选择你所喜欢的背景颜色",text.getBackground());
            if(newColor!=null){
                text.setBackground(newColor);
            }
        }
        else if(str.equals("缩放(Z)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("状态栏(S)")){

        }
        else if(str.equals("放大(I)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("缩小(O)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("恢复默认缩放")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,"尚无此功能");
        }
        else if(str.equals("查看帮助(H)")){
        try { 
            String url = "https://i.csdn.net/#/uc/profile"; 
            java.net.URI uri = java.net.URI.create(url); 
            java.awt.Desktop dp = java.awt.Desktop.getDesktop(); 
            if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) { 
                dp.browse(uri);
            }
            } catch (java.lang.NullPointerException e5) { 
                e5.printStackTrace(); 
            } catch (java.io.IOException e5) { 
            e5.printStackTrace(); 
            } 
            }
        else if(str.equals("关于反馈(F)")){
            
        }
        else if(str.equals("关于记事本(A)")){
            text.requestFocus();
            JOptionPane.showMessageDialog(this,
            "///—————————————————————《欢迎使用霖霖记事本》————————————————————///\n"+
            "——————————————————————————————————————————————————————\n"+
            "创作人:鲜霖\n"+
            "e-mail:linxian479@gmail.com\n"+
            "———1589861957@qq.com\n"+
            "创作时间:2020年6月20日\n"+
            "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n",
            "记事本",JOptionPane.INFORMATION_MESSAGE);
        }
}
    public void removeUpdate(DocumentEvent e)  
    {   cai21.setEnabled(true);  
    }  
    public void insertUpdate(DocumentEvent e)  
    {   cai21.setEnabled(true);  
    }  
    public void changedUpdate(DocumentEvent e)  
    {   cai21.setEnabled(true);  
    }//DocumentListener结束  

    class UndoHandler implements UndoableEditListener  
    {   public void undoableEditHappened(UndoableEditEvent uee)  
        {   undo.addEdit(uee.getEdit());  
        }  
    } 
}

主类

import data.*;
public class Xiaoxiaonote {
    public static void main(String [] args){
        Mynote s = new Mynote();
    } 
}

注:部分参考参考原文
初学,另外英语极差所以变量命名主要为拼音首字母,主要是为了交作业呀!

import java.awt.BorderLayout; import java.awt.Container; 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 javax.swing.BorderFactory; 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.KeyStroke; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; public class JNotePadUI extends JFrame { private JMenuItem menuOpen; private JMenuItem menuSave; private JMenuItem menuSaveAs; private JMenuItem menuClose; private JMenu editMenu; private JMenuItem menuCut; private JMenuItem menuCopy; private JMenuItem menuPaste; private JMenuItem menuAbout; private JTextArea textArea; private JLabel stateBar; private JFileChooser fileChooser; private JPopupMenu popUpMenu; public JNotePadUI() { super("新建文本文件"); setUpUIComponent(); setUpEventListener(); setVisible(true); } private void setUpUIComponent() { setSize(640, 480); // 菜单栏 JMenuBar menuBar = new JMenuBar(); // 设置「文件」菜单 JMenu fileMenu = new JMenu("文件"); menuOpen = new JMenuItem("打开"); // 快捷键设置 menuOpen.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_O, InputEvent.CTRL_MASK)); menuSave = new JMenuItem("保存"); menuSave.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK)); menuSaveAs = new JMenuItem("另存为"); menuClose = new JMenuItem("关闭"); menuClose.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, InputEvent.CTRL_MASK)); fileMenu.add(menuOpen); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuSave); fileMenu.add(menuSaveAs); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuClose); // 设置「编辑」菜单 JMenu editMenu = new JMenu("编辑"); menuCut = new JMenuItem("剪切"); menuCut.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); menuCopy = new JMenuItem("复制"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); menuPaste = new JMenuItem("粘贴"); menuPaste.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editMenu.add(menuCut); editMenu.add(menuCopy); editMenu.add(menuPaste); // 设置「关于」菜单 JMenu aboutMenu = new JMenu("关于"); menuAbout = new JMenuItem("关于JNotePad"); aboutMenu.add(menuAbout); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(aboutMenu); setJMenuBar(menuBar); // 文字编辑区域 textArea = new JTextArea(); textArea.setFont(new Font("宋体", Font.PLAIN, 16)); textArea.setLineWrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); Container contentPane = getContentPane(); contentPane.add(panel, BorderLayout.CENTER); // 状态栏 stateBar = new JLabel("未修改"); stateBar.setHorizontalAlignment(SwingConstants.LEFT); stateBar.setBorder( BorderFactory.createEtchedBorder()); contentPane.add(stateBar, BorderLayout.SOUTH); popUpMenu = editMenu.getPopupMenu(); fileChooser = new JFileChooser(); } private void setUpEventListener() { // 按下窗口关闭钮事件处理 addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { closeFile(); } } ); // 菜单 - 打开 menuOpen.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { openFile(); } } ); // 菜单 - 保存 menuSave.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFile(); } } ); // 菜单 - 另存为 menuSaveAs.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFileAs(); } } ); // 菜单 - 关闭文件 menuClose.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { closeFile(); } } ); // 菜单 - 剪切 menuCut.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { cut(); } } ); // 菜单 - 复制 menuCopy.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { copy(); } } ); // 菜单 - 粘贴 menuPaste.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { paste(); } } ); // 菜单 - 关于 menuAbout.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { // 显示对话框 JOptionPane.showOptionDialog(null, "程序名称:\n JNotePad \n" + "程序设计:\n \n" + "简介:\n 一个简单的文字编辑器\n" + " 可作为验收Java实现对象\n" + " 欢迎网友下载研究交流\n\n" + " /", "关于JNotePad", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null); } } ); // 编辑区键盘事件 textArea.addKeyListener( new KeyAdapter() { public void keyTyped(KeyEvent e) { processTextArea(); } } ); // 编辑区鼠标事件 textArea.addMouseListener( new MouseAdapter() { public void mouseReleased(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON3) popUpMenu.show(editMenu, e.getX(), e.getY()); } public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) popUpMenu.setVisible(false); } } ); } 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 boolean isCurrentFileSaved() { if(stateBar.getText().equals("未修改")) { return false; } else { return true; } } 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()); // 清除前一次文件 textArea.setText(""); // 设定状态栏 stateBar.setText("未修改"); // 取得系统相依的换行字符 String lineSeparator = System.getProperty("line.separator"); // 读取文件并附加至文字编辑区 String text; while((text = buf.readLine()) != null) { textArea.append(text); textArea.append(lineSeparator); } buf.close(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "开启文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFile() { // 从标题栏取得文件名称 File file = new File(getTitle()); // 若指定的文件不存在 if(!file.exists()) { // 执行另存为 saveFileAs(); } else { try { // 开启指定的文件 BufferedWriter buf = new BufferedWriter( new FileWriter(file)); // 将文字编辑区的文字写入文件 buf.write(textArea.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 file = fileChooser.getSelectedFile(); // 在标题栏上设定文件名称 setTitle(file.toString()); try { // 建立文件 file.createNewFile(); // 进行文件保存 saveFile(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "无法建立新文件", JOptionPane.ERROR_MESSAGE); } } } private void closeFile() { // 是否已保存文件 if(isCurrentFileSaved()) { // 释放窗口资源,而后关闭程序 dispose(); } 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: dispose(); } } } private void cut() { textArea.cut(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void copy() { textArea.copy(); popUpMenu.setVisible(false); } private void paste() { textArea.paste(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void processTextArea() { stateBar.setText("已修改"); } public static void main(String[] args) { new JNotePadUI(); } }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值