自己根据网上资料做的一个记事本,有些功能还不太完善。 您所在的位置:网站首页 checkcase 自己根据网上资料做的一个记事本,有些功能还不太完善。

自己根据网上资料做的一个记事本,有些功能还不太完善。

2023-04-05 16:06| 来源: 网络整理| 查看: 265

这个记事本主要是在学习javaGUI及其基本知识后,参考网上资料做出。在制作过程中,同时也发现了java中lastIndex()方法存在不能准确删选数据的情况,然后自己进行了修改。

以下是代码部分:

package com.Program;import java.awt.*;import java.awt.datatransfer.*;

import javax.swing.*;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import javax.swing.event.MenuEvent;import javax.swing.event.MenuKeyEvent;import javax.swing.event.MenuKeyListener;import javax.swing.event.MenuListener;import javax.swing.undo.*;

import java.awt.event.*;import java.io.*;import java.text.SimpleDateFormat;import java.util.Date;public class NoteBook extends JFrame implements ActionListener  {    JMenuBar bar;//菜单栏    JMenu menu1,  menu2,  menu3,  menu4,  menu5;//菜单    JPopupMenu menu6;//右键弹出菜单    JMenuItem menu10 ,menu11, menu12, menu13, menu14, menu15, menu16;//菜单一:子菜单    JMenuItem menu20 ,menu21, menu22, menu23, menu24, menu25, menu26, menu27, menu28, menu29, menu291;//菜单二:子菜单    JMenuItem menu31; JCheckBoxMenuItem menu30;//菜单三:子菜单    JCheckBoxMenuItem menu40;//菜单四:子菜单    JMenuItem menu50 ,menu51;//菜单五:子菜单    JMenuItem menu60 ,menu61 ,menu62 ,menu63 ,menu64 ,menu65 ;//右键弹出菜单子菜单    JTextArea textarea;//文本域    JScrollPane scroll;//滚动条    JLabel statusBar;//状态栏标签    Font font1;//字体    UndoManager undo;//撤销    Toolkit toolKit;//工具包    Clipboard clipboard;//剪贴板    JCheckBox checkCase;//查找下一个(F3)    TextField searchContents = new TextField(15);//查找搜索框内内容    TextField field1 = new TextField(15);//替换搜索框内容    TextField field2 = new TextField(15);//替换内容    public static void main(String[] args) {        NoteBook nob = new NoteBook();    }    NoteBook(){

        font1 = new Font("微软雅黑",Font.PLAIN,12);//设置字体        //实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素。        //UIManager 管理当前外观、可用外观集合、外观更改时被通知的 PropertyChangeListeners、外观默认值以及获取各种默认值的便捷方法。         //getDefaults()返回包含该默认值的 UIDefaults 对象。使用类文档中指定的逻辑解析返回的默认值,        //Swing 组件的默认值表。应用程序可以通过 UIManager 设置/获取默认值        //UIManager.put(Object key, Object value);在开发人员默认值中存储一个对象。此方法是 getDefaults().put(key, value) 的一个覆盖方法。        //此方法仅对开发人员默认值有效,对系统默认值和外观默认值无效。        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, font1);              }          }        undo = new UndoManager();//撤销操作创建了一个 UndoManager

        toolKit = Toolkit.getDefaultToolkit(); //获取默认工具包        //创建剪贴板对象,获取系统 Clipboard 的一个实例,该 Clipboard 可作为本机平台提供的剪贴板工具的接口        clipboard = toolKit.getSystemClipboard();

        bar = new JMenuBar();//菜单栏

        //设置文件菜单及其子菜单        menu1 = new JMenu("文件(F)");        menu1.setMnemonic(‘F‘);//设置快捷键Alt+F

        menu10 = new JMenuItem("新建(N)");        menu10.setMnemonic(‘N‘);        menu10.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));//设置快捷键Ctrl+N        menu10.addActionListener(this);//设置组件监听

        menu11 = new JMenuItem("打开(O)");        menu11.setMnemonic(‘O‘);        menu11.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));        menu11.addActionListener(this);

        menu12 = new JMenuItem("保存(S)");        menu12.setMnemonic(‘S‘);        menu12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));        menu12.addActionListener(this);

        menu13 = new JMenuItem("另存为(A)");        menu13.setMnemonic(‘A‘);        menu13.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));        menu13.addActionListener(this);

        menu14 = new JMenuItem("页面设置(U)");        menu14.setMnemonic(‘U‘);        menu14.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK));        menu14.addActionListener(this);

        menu15 = new JMenuItem("打印(P)");        menu15.setMnemonic(‘P‘);        menu15.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));        menu15.addActionListener(this);

        menu16 = new JMenuItem("退出(X)");        menu16.setMnemonic(‘X‘);        menu16.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));        menu16.addActionListener(this);

        //设置编辑菜单及其子菜单        menu2 = new JMenu("编辑(E)");        menu2.setMnemonic(‘E‘);

        menu20 = new JMenuItem("撤销(U)");        menu20.setMnemonic(‘U‘);        menu20.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));        menu20.addActionListener(this);

        menu21 = new JMenuItem("剪切(T)");        menu21.setMnemonic(‘T‘);        menu21.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK));        menu21.addActionListener(this);

        menu22 = new JMenuItem("复制(C)");        menu22.setMnemonic(‘C‘);        menu22.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));        menu22.addActionListener(this);

        menu23 = new JMenuItem("粘贴(V)");        menu23.setMnemonic(‘V‘);        menu23.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));        menu23.addActionListener(this);

        menu24 = new JMenuItem("删除(L)");        menu24.setMnemonic(‘L‘);        menu24.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));        menu24.addActionListener(this);

        menu25 = new JMenuItem("查找(F)");        menu25.setMnemonic(‘F‘);        menu25.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));        menu25.addActionListener(this);

        menu26 = new JMenuItem("查找下一个(N)");        menu26.setMnemonic(‘N‘);        menu26.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));        menu26.addActionListener(this);

        menu27 = new JMenuItem("替换(R)");        menu27.setMnemonic(‘R‘);        menu27.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));        menu27.addActionListener(this);

        menu28 = new JMenuItem("转到(G)");        menu28.setMnemonic(‘G‘);        menu28.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK));        menu28.addActionListener(this);

        menu29 = new JMenuItem("全选(A)");        menu29.setMnemonic(‘A‘);        menu29.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));        menu29.addActionListener(this);

        menu291 = new JMenuItem("时间/日期(D)");        menu291.setMnemonic(‘D‘);        menu291.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0));        menu291.addActionListener(this);

        //格式菜单及其子菜单        menu3 = new JMenu("格式(O)");        menu3.setMnemonic(‘O‘);

        menu30 = new JCheckBoxMenuItem("自动换行(W)");//可以被选定或取消选定的菜单项        menu30.setMnemonic(‘W‘);        menu30.setState(true);//默认自动转行为选定状态

        menu30.addActionListener(this);

        menu31 = new JMenuItem("字体(F)");        menu31.setMnemonic(‘F‘);        menu31.addActionListener(this);

        //查看菜单及子菜单            menu4 = new JMenu("查看(V)");        menu4.setMnemonic(‘V‘);

        menu40 = new JCheckBoxMenuItem("状态栏(S)");        menu40.setMnemonic(‘S‘);        menu40.addActionListener(this);

        //帮助菜单及子菜单        menu5 = new JMenu("帮助(H)");        menu5.setMnemonic(‘U‘);

        menu50 = new JMenuItem("查看帮助(H)");        menu50.setMnemonic(‘H‘);        menu50.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));        menu50.addActionListener(this);

        menu51 = new JMenuItem("关于记事本(A)");        menu51.setMnemonic(‘A‘);        menu51.addActionListener(this);

        //右键弹出菜单及子菜单        menu6 = new JPopupMenu();        menu60 = new JMenuItem("撤销(U)");        menu60.addActionListener(this);        menu61 = new JMenuItem("剪切(X)");        menu61.addActionListener(this);        menu62 = new JMenuItem("复制(C)");        menu62.addActionListener(this);        menu63 = new JMenuItem("粘贴(V)");        menu63.addActionListener(this);        menu64 = new JMenuItem("删除(L)");        menu64.addActionListener(this);        menu65 = new JMenuItem("全选(A)");        menu65.addActionListener(this);

        //新建文本域和滚动条        textarea = new JTextArea();        textarea.setLineWrap(true);//自动转行为选定状态时,使textarea自动转行        //将UndoManager 并将它作为 UndoableEditListener 添加到 JTextArea        textarea.getDocument().addUndoableEditListener(undo);        scroll = new JScrollPane(textarea);                //状态栏标签        statusBar = new JLabel("状态栏");        statusBar.setVisible(false);

        //向菜单添加组件        menu1.add(menu10);        menu1.add(menu11);        menu1.add(menu12);        menu1.add(menu13);        menu1.addSeparator();        menu1.add(menu14);        menu1.add(menu15);        menu1.addSeparator();        menu1.add(menu16);

        menu2.add(menu20);        menu2.addSeparator();        menu2.add(menu21);        menu2.add(menu22);        menu2.add(menu23);        menu2.add(menu24);        menu2.addSeparator();        menu2.add(menu25);        menu2.add(menu26);        menu2.add(menu27);        menu2.add(menu28);        menu2.addSeparator();        menu2.add(menu29);        menu2.add(menu291);

        menu3.add(menu30);        menu3.add(menu31);

        menu4.add(menu40);

        menu5.add(menu50);        menu5.addSeparator();        menu5.add(menu51);

        menu6.add(menu60);        menu6.addSeparator();        menu6.add(menu61);        menu6.add(menu62);        menu6.add(menu63);        menu6.add(menu64);        menu6.addSeparator();        menu6.add(menu65);

        //向菜单栏添加菜单        bar.add(menu1);        bar.add(menu2);        bar.add(menu3);        bar.add(menu4);        bar.add(menu5);

        /*//设置菜单字体        menu1.setFont(font1);        menu2.setFont(font1);        menu3.setFont(font1);        menu4.setFont(font1);        menu5.setFont(font1);*/

        //向JFrame添加组件        this.setJMenuBar(bar);        this.add(scroll);        this.add(statusBar,BorderLayout.SOUTH);

        //设置窗口        ImageIcon img1 = new ImageIcon("image/note.png");        this.setIconImage(img1.getImage());        this.setTitle("记事本");        this.setSize(600, 400);        this.setLocation(300, 300);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        this.setVisible(true);

        //添加窗口监听事件,new WindowAdapter()接收窗口事件的抽象适配器类,        //其下方法public void windowClosing(WindowEvent e)        this.addWindowListener(new WindowAdapter(){            public void windowClosing(WindowEvent e){                windowExit();//调用窗口关闭时的方法            }        });

        //设置打开编辑菜单时调用功能可用性函数,实现各功能的可用性        menu2.addMenuListener(new MenuListener(){//添加菜单事件的侦听器

            @Override            public void menuCanceled(MenuEvent e) {//取消菜单时调用

                functionAvailable();//调用编辑菜单功能可用性            }

            @Override            public void menuDeselected(MenuEvent e) {//取消选择某个菜单时调用

                functionAvailable();            }

            @Override            public void menuSelected(MenuEvent e) {//选择某个菜单时调用

                functionAvailable();            }

        });

        //文本域点击右键出现菜单事件        //扩展此类可创建 MouseEvent(包括拖动和移动事件)或/和 MouseWheelEvent 侦听器,并针对所需事件重写方法        textarea.addMouseListener(new MouseAdapter(){            public void mousePressed(MouseEvent e){                if(e.isPopupTrigger()){//返回此鼠标事件是否为该平台的弹出菜单触发事件                    //e.getComponent()返回事件的始发者,e.get()返回事件相对于源组件的水平 x ,y坐标。                    //在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单。                    menu6.show(e.getComponent(),e.getX(), e.getY());                    }                functionAvailable();

            }            public void mouseReleased(MouseEvent e){                if(e.isPopupTrigger()){//返回此鼠标事件是否为该平台的弹出菜单触发事件                    //e.getComponent()返回事件的始发者,e.get()返回事件相对于源组件的水平 x ,y坐标。                    //在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单。                    menu6.show(e.getComponent(),e.getX(), e.getY());                }                functionAvailable();            }        });    }    /*protected void processWindowEvent(WindowEvent e) {          if (e.getID() == WindowEvent.WINDOW_CLOSING)              System.out.println("ss");; //直接返回,阻止默认动作,阻止窗口关闭       }*/     //LastIndexOf方法替换    public int change(String strA,String strB,int index){        int k = -1;        char[] chA = strA.toCharArray();        for (int i = 0; i < chA.length/2; i++) {            char mg = chA[i];            chA[i] = chA[chA.length-1-i];            chA[chA.length-1-i] = mg;        }        char[] chB = strB.toCharArray();        for (int i = 0; i < chB.length/2; i++) {            char mg = chB[i];            chB[i] = chB[chB.length-1-i];            chB[chB.length-1-i] = mg;        }        String strC = new String(chA);        String strD = new String(chB);

        if(strC.indexOf(strD,strA.length()-1-index) != -1){            k = strA.length()-(strC.indexOf(strD,strA.length()-1-index)+strB.length());        }        return k;        }    //设置各功能可用性    public void functionAvailable(){        if(textarea.getText().equals("")){//文本为空时查找一系列功能不可用            menu25.setEnabled(false);            menu26.setEnabled(false);        }else{            menu25.setEnabled(true);            menu26.setEnabled(true);        }        if(textarea.getSelectedText() == null){//文本域选择内容为空时设置可用性            menu21.setEnabled(false);            menu22.setEnabled(false);            menu24.setEnabled(false);            menu61.setEnabled(false);            menu62.setEnabled(false);            menu64.setEnabled(false);        }else{            menu21.setEnabled(true);            menu22.setEnabled(true);            menu24.setEnabled(true);            menu61.setEnabled(true);            menu62.setEnabled(true);            menu64.setEnabled(true);        }        if(clipboard.getContents(this) == null){//剪贴板可用性            menu23.setEnabled(false);            menu63.setEnabled(false);        }else{            menu23.setEnabled(true);            menu63.setEnabled(true);        }    }    public void windowExit(){//窗口关闭时的方法        String textAll = textarea.getText();        if(!textAll.equals("")){//文本域不为空            int choice = JOptionPane.showConfirmDialog(null, "你的文件尚未保存,是否保存?", "记事本",JOptionPane.YES_NO_CANCEL_OPTION );            if(choice == JOptionPane.NO_OPTION){//不保存,直接退出                System.exit(0);            }else if(choice == JOptionPane.CANCEL_OPTION){//取消不做任何操作                this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);            }else if(choice == JOptionPane.YES_OPTION){//保存文件,调用保存功能                JFileChooser jfl = new JFileChooser();//弹出一个针对用户主目录的文件选择器,                jfl.setDialogTitle("保存");                jfl.showSaveDialog(null);                jfl.setVisible(true);                    try{                    String filePath = jfl.getSelectedFile().getAbsolutePath();//获取选择文件的绝对路径                    PrintStream prins = new PrintStream(filePath);//创建具有指定文件且不带自动行刷新的新打印流                    System.setOut(prins);//重新分配“标准”输出流public static void setOut(PrintStream out)                    System.out.println(this.textarea.getText());//                }catch(Exception exception){

                }            }        }    }

    @Override    public void actionPerformed(ActionEvent e) {//组件事件功能实现        if(e.getSource()==menu10){//文件菜单新建功能            String textAll = textarea.getText();            if(!textAll.equals("")){//文本域不为空                int choice = JOptionPane.showConfirmDialog(null, "你的文件尚未保存,是否保存?", "记事本",JOptionPane.YES_NO_CANCEL_OPTION );                if(choice == JOptionPane.NO_OPTION){//不保存,文本域内容置为空                    textarea.setText(null);                }else if(choice == JOptionPane.CANCEL_OPTION){//取消不做任何操作

                }else if(choice == JOptionPane.YES_OPTION){//保存文件,调用保存功能                    JFileChooser jfl = new JFileChooser();//弹出一个针对用户主目录的文件选择器,                    jfl.setDialogTitle("保存");                    jfl.showSaveDialog(null);                    jfl.setVisible(true);                        try{                        String filePath = jfl.getSelectedFile().getAbsolutePath();//获取选择文件的绝对路径                        PrintStream prins = new PrintStream(filePath);//创建具有指定文件且不带自动行刷新的新打印流                        System.setOut(prins);//重新分配“标准”输出流public static void setOut(PrintStream out)                        System.out.println(this.textarea.getText());//                    }catch(Exception exception){

                    }                }            }        }else if(e.getSource()==menu11){//文件菜单打开功能            JFileChooser jfl = new JFileChooser();            jfl.setDialogTitle("打开文件");            jfl.showOpenDialog(null);            jfl.setVisible(true);                    FileReader fileFlow = null;            BufferedReader bufferedStream = null;            try{                String filePath = jfl.getSelectedFile().getAbsolutePath();                fileFlow = new FileReader(filePath);//在给定从中读取数据的 File 的情况下创建一个新 FileReader                bufferedStream =new BufferedReader(fileFlow);//创建一个使用默认大小输入缓冲区的缓冲字符输入流                String rolText = "",allText = "";                while((rolText = bufferedStream.readLine()) != null){//当不为空时,一行一行的读取文件中的字符                    allText += rolText+" ";                }                textarea.setText(allText);            }catch(Exception exception){

            }finally{                try{//关闭流                    fileFlow.close();                    bufferedStream.close();                }catch(Exception exception){

                }            }                }else if(e.getSource() == menu12){//文件菜单保存功能            JFileChooser jfl = new JFileChooser();            jfl.setDialogTitle("保存");            jfl.showSaveDialog(null);            jfl.setVisible(true);                try{                String filePath = jfl.getSelectedFile().getAbsolutePath();                PrintStream prins = new PrintStream(filePath);                System.setOut(prins);                System.out.println(this.textarea.getText());            }catch(Exception exception){

            }        }else if(e.getSource() == menu13){//文件菜单另存为功能            JFileChooser jfl = new JFileChooser();            jfl.setDialogTitle("另存为");            jfl.showSaveDialog(null);            jfl.setVisible(true);                try{                String filePath = jfl.getSelectedFile().getAbsolutePath();                PrintStream prins = new PrintStream(filePath);                System.setOut(prins);                System.out.println(this.textarea.getText());            }catch(Exception exception){

            }        }else if(e.getSource() == menu14){//文件菜单页面设置功能            JOptionPane.showMessageDialog(null,"吾学识有限,尚不能实现该功能,还望见谅!","页面设置",JOptionPane.INFORMATION_MESSAGE);        }else if(e.getSource() == menu15){//文件菜单打印功能            JOptionPane.showMessageDialog(null,"吾学识有限,仍不能实现该功能,吾将继续学习!","打印",JOptionPane.INFORMATION_MESSAGE);        }else if(e.getSource() == menu16){//文件菜单退出功能            String textAll = textarea.getText();            if(!textAll.equals("")){//文本域不为空                int choice = JOptionPane.showConfirmDialog(null, "你的文件尚未保存,是否保存?", "记事本",JOptionPane.YES_NO_CANCEL_OPTION );                if(choice == JOptionPane.NO_OPTION){//不保存,文本域内容置为空                    System.exit(0);                }else if(choice == JOptionPane.CANCEL_OPTION){//取消不做任何操作

                }else if(choice == JOptionPane.YES_OPTION){//保存文件,调用保存功能                    JFileChooser jfl = new JFileChooser();                    jfl.setDialogTitle("保存");                    jfl.showSaveDialog(null);                    jfl.setVisible(true);                        try{                        String filePath = jfl.getSelectedFile().getAbsolutePath();                        PrintStream prins = new PrintStream(filePath);                        System.setOut(prins);                        System.out.println(this.textarea.getText());                    }catch(Exception exception){

                    }                }            }else{                System.exit(0);            }        }else if(e.getSource() == menu20 || e.getSource() == menu60){//撤销功能的实现            if(undo.canUndo()){                try{                    undo.undo();                }catch(Exception exception){

                }            }else if(!undo.canUndo()){

            }        }else if(e.getSource() == menu21 || e.getSource() == menu61){//剪切功能的实现            String textSlected = textarea.getSelectedText();//获取选择的文本            StringSelection selection = new StringSelection(textSlected);//创建能传输指定 String 的 Transferable            //将剪贴板的当前内容设置到指定的 transferable 对象,并将指定的剪贴板所有者作为新内容的所有者注册。             clipboard.setContents(selection, null);            if(textSlected != null && textSlected.length() != 0){//textSlected为空时,textSlected.length报错                //用指定替换文本替换指定开始位置与结束位置之间的文本                textarea.replaceRange("", textarea.getSelectionStart(),textarea.getSelectionEnd());            }else{                return;            }        }else if(e.getSource() == menu22 || e.getSource() == menu62){//复制功能的实现            String textSlected = textarea.getSelectedText();//获取选择的文本            StringSelection selection = new StringSelection(textSlected);            clipboard.setContents(selection, null);        }else if(e.getSource() == menu23 || e.getSource() == menu63){//粘贴功能的实现            Transferable selection = clipboard.getContents(this);//获取剪贴板当前内容的 transferable 对象            String change = null;            try{                //DataFlavor 表示 Java Unicode String 类,getTransferData返回一个对象,该对象表示将要被传输的数据                change = (String)selection.getTransferData(DataFlavor.stringFlavor);            }catch(Exception e1){

            }            if(change != null){                //如果剪贴板内容不为空,则替换所选字符串                textarea.replaceRange(change, textarea.getSelectionStart(),textarea.getSelectionEnd());            }else{                return;            }        }else if(e.getSource() == menu24 || e.getSource() == menu64){//删除功能的实现            //将所选字符串用""代替            textarea.replaceRange("", textarea.getSelectionStart(),textarea.getSelectionEnd());        }else if(e.getSource() == menu25){//查找功能的实现

            final JDialog dialog = new JDialog(this,"查找",false);            //dialog.setLayout(new FlowLayout())不存在FlowLayout.LEFT功能,故需要生成一个Container            Container content=dialog.getContentPane();//返回此对话框的contentPane对象  ,Container contentPane            content.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置左对齐

            JLabel search = new JLabel("查找内容(N):");            final JButton searchNext = new JButton("查找下一个(F)");

            checkCase = new JCheckBox("区分大小写(C)");                //ButtonGroup把单选按钮放进一个组里,默认功能是组里按钮只能选一个            ButtonGroup btg = new ButtonGroup();            final JRadioButton upButton = new JRadioButton("向上(U)");            final JRadioButton downButton = new JRadioButton("向下(D)");            upButton.setSelected(true);            btg.add(downButton);            btg.add(upButton);            //创建一个放置向上向下按钮的JPanel面板            JPanel dirPanel = new JPanel();            //设置dirPanel的边框,BorderFactory边框工厂,createTitledBorder("方向")为创建一个空标题的新标题边框,            //使其具有指定的边框对象、默认的文本位置(位于顶线上)、默认的调整 (leading),以及默认的字体和文本颜色(由当前外观确定)。             dirPanel.setBorder(BorderFactory.createTitledBorder("方向"));            dirPanel.add(upButton);            dirPanel.add(downButton);

            JButton cancel = new JButton("取消");

            JPanel panel1 = new JPanel();            JPanel panel2 = new JPanel();            JPanel panel3 = new JPanel();

            panel3.add(searchNext);            panel3.add(cancel);            panel3.setLayout(new GridLayout(2,1,0,10));

            panel1.add(search);            panel1.add(searchContents);            panel1.add(panel3);

            panel2.add(checkCase);            panel2.add(dirPanel);

            dialog.add(panel1);            dialog.add(panel2);

            dialog.setBounds(500, 500, 450,180);            dialog.setResizable(false);            dialog.setVisible(true);            //组件监听            //取消按钮操作            cancel.addActionListener(new ActionListener(){                @Override                public void actionPerformed(ActionEvent e) {                    //释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源;并且dialog需要定义为final                    dialog.dispose();                    }            });            //搜索框默认为空时设置searchNext不可用            if(searchContents.getText().equals("")){                searchNext.setEnabled(false);            }            //监听searchContents内容变化时,如果没有内容searchNext为不可用,否则可用            searchContents.addTextListener(new TextListener(){                @Override                public void textValueChanged(TextEvent arg0) {                    if(!searchContents.getText().equals("")){                        searchNext.setEnabled(true);                    }else{                        searchNext.setEnabled(false);                    }                }            });

            //监听查找下一个按钮            searchNext.addActionListener(new ActionListener(){                private int messageType;

                @Override                public void actionPerformed(ActionEvent e) {                    int k = 0;                    String str1 , str2 , str3 , str4 ;                    str1 = textarea.getText();                    str2 = searchContents.getText();                    if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换                        str3 = str1;                        str4 = str2;                    }else{//如果不区分大小写,则将其统一转换为大写或者小写                        str3 = str1.toUpperCase();                        str4 = str2.toUpperCase();                    }                    if(upButton.isSelected()){

                        if(textarea.getSelectedText() == null){//从光标位置开始查找                            //System.out.println(textarea.getCaretPosition());                            //textarea.getCaretPosition()获取光标末尾或者选中文本末尾的对应值,                            //该值从0到字符个数之间变化,所有字符前为0,光标向后移动一个字符依次向后加一                            //k是查找内容的索引值,光标位于其之前时,其值与此时的CaretPosition值一样                            //但lastIndexOf有bug查找时只要光标索引值>=包含所查找字符串的第一个字符的索引值就会默认查找                            k =change(str3,str4,textarea.getCaretPosition()-1);

                            //k = str3.lastIndexOf(str4,textarea.getCaretPosition()-1);

                            //System.out.println(textarea.getCaretPosition());                            //System.out.println(k);                        }else{//从选中文本开始查找, textarea.getSelectedText().length()为选中文本长度                            k =change(str3,str4, textarea.getCaretPosition()- textarea.getSelectedText().length()-1);                            //k = str3.lastIndexOf(str4, textarea.getCaretPosition()- searchContents.getText().length()-1 );                            //System.out.println(k);                            System.out.println(textarea.getCaretPosition());                            System.out.println(searchContents.getText().length());                            System.out.println(textarea.getCaretPosition()- searchContents.getText().length()-1);                        }                        if(k != -1){                            textarea.setCaretPosition(k);//                            textarea.select(k, k+searchContents.getText().length());                        }else{                            //定义str5 为“找不到(查找内容)”的显示                            String str5 = "找不到""+searchContents.getText()+""";                            //设置弹出框                            JOptionPane.showMessageDialog(null, str5,"记事本",JOptionPane.WARNING_MESSAGE);                        }                        }else if(downButton.isSelected()){                        //向下寻找时不管是光标(getCaretPosition()值为光标右边字符的位数)                        //还是选中字符串(getCaretPosition()值为选中字符串最后一位字符的位数)                        //其开始寻找位置的索引值为(getCaretPosition()值+1)的字符的索引即值-1,即getCaretPosition()                        k = str3.indexOf(str4,textarea.getCaretPosition());                        /*if(textarea.getSelectedText() == null){                            k = str3.indexOf(str4,textarea.getCaretPosition());                            System.out.println(textarea.getCaretPosition());                        }else{                            k = str3.indexOf(str4, textarea.getCaretPosition());                            System.out.println(textarea.getCaretPosition());                        }*/                        if(k != -1){                            textarea.setCaretPosition(k);//                            textarea.select(k, k+searchContents.getText().length());                        }else{                            String str5 = "找不到""+searchContents.getText()+""";                            JOptionPane.showMessageDialog(null, str5,"记事本",JOptionPane.WARNING_MESSAGE);                        }                    }                 }                    });        }else if(e.getSource() == menu26){            if(!searchContents.getText().equals("")){                int k = 0;                String str1 , str2 , str3 , str4 ;                str1 = textarea.getText();                str2 = searchContents.getText();                if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换                    str3 = str1;                    str4 = str2;                }else{//如果不区分大小写,则将其统一转换为大写或者小写                    str3 = str1.toUpperCase();                    str4 = str2.toUpperCase();                }                k = str3.indexOf(str4,textarea.getCaretPosition());                if(k != -1){                    textarea.setCaretPosition(k);//                    textarea.select(k, k+searchContents.getText().length());                }else{                    String str5 = "找不到""+searchContents.getText()+""";                    JOptionPane.showMessageDialog(null, str5,"记事本",JOptionPane.WARNING_MESSAGE);                }            }            }else if(e.getSource() == menu27){            System.out.println("3");            //创建查找对话框            final JDialog dialog = new JDialog(this,"查找",false);            JLabel searchContent = new JLabel("查找内容(N)");            JLabel  replace = new JLabel("替换为(P)");            final JButton buttonSearch = new JButton("查找下一个(F)");            final JButton buttonReplace = new JButton("替换(R)");            final JButton buttonAll = new JButton("全部替换(A)");            JButton buttonCancel = new JButton("取消");            final JCheckBox checkCase = new JCheckBox("区分大小写(C)");

            JPanel panel1 = new JPanel();            JPanel panel2 = new JPanel();            JPanel panel3 = new JPanel();            JPanel panel4 = new JPanel();

            panel1.setLayout(new GridLayout(2,1,0,30));            panel1.add(searchContent);            panel1.add(replace);

            panel2.setLayout(new GridLayout(2,1,0,30));            panel2.add(field1);            panel2.add(field2);

            panel3.setLayout(new GridLayout(4,1,0,8));            panel3.add(buttonSearch);            panel3.add(buttonReplace);            panel3.add(buttonAll);            panel3.add(buttonCancel);

            //panel4.setLayout(new GridLayout(1,3));            panel4.add(panel1,BorderLayout.WEST);            panel4.add(panel2,BorderLayout.CENTER);            panel4.add(panel3,BorderLayout.EAST);

            dialog.setLayout(new BorderLayout());            dialog.add(panel4,BorderLayout.CENTER);            dialog.add(checkCase,BorderLayout.SOUTH);            dialog.setBounds(500, 500, 400,190);            dialog.setResizable(false);            dialog.setVisible(true);            //组件监听            //取消按钮操作            buttonCancel.addActionListener(new ActionListener(){                @Override                public void actionPerformed(ActionEvent e) {                    //释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源;并且dialog需要定义为final                    dialog.dispose();                    }            });            //搜索框默认为空时设置searchNext不可用            if(field1.getText().equals("")){                buttonSearch.setEnabled(false);                buttonReplace.setEnabled(false);                buttonAll.setEnabled(false);            }            //监听field1内容变化时,如果没有内容buttonSearch、buttonReplace、buttonAll为不可用,否则可用            field1.addTextListener(new TextListener(){                @Override                public void textValueChanged(TextEvent arg0) {                    if(!field1.getText().equals("")){                        buttonSearch.setEnabled(true);                        buttonReplace.setEnabled(true);                        buttonAll.setEnabled(true);                    }else{                        buttonSearch.setEnabled(false);                        buttonReplace.setEnabled(false);                        buttonAll.setEnabled(false);                    }                }            });            //监听查找下一个按钮            buttonSearch.addActionListener(new ActionListener(){                private int messageType;

                @Override                public void actionPerformed(ActionEvent e) {                    int k = 0;                    String str1 , str2 , str3 , str4 ;                    str1 = textarea.getText();                    str2 = field1.getText();                    if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换                        str3 = str1;                        str4 = str2;                    }else{//如果不区分大小写,则将其统一转换为大写或者小写                        str3 = str1.toUpperCase();                        str4 = str2.toUpperCase();                    }                    k = str3.indexOf(str4,textarea.getCaretPosition());                    if(k != -1){                        textarea.setCaretPosition(k);//                        textarea.select(k, k+field1.getText().length());                    }else{                        String str5 = "找不到""+field1.getText()+""";                        JOptionPane.showMessageDialog(null, str5,"记事本",JOptionPane.WARNING_MESSAGE);                    }                }                    });            //替换按钮监听事件            buttonReplace.addActionListener(new ActionListener(){                @Override                public void actionPerformed(ActionEvent e) {                    int k = 0;                    String str1 , str2 , str3 , str4 ,str5 ,str6 ,str7 ,str8;                    str1 = textarea.getText();                    str2 = field1.getText();                    str3 = textarea.getSelectedText();//没有选择为空                    str4 = field2.getText();

                    if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换                        str5 = str1;                        str6 = str2;                        if(str3 == null){//str3空处理                            str7 = "";                        }else{                            str7 = str3;                        }                        str8 = str4;                    }else{//如果不区分大小写,则将其统一转换为大写或者小写                        str5 = str1.toUpperCase();                        str6 = str2.toUpperCase();                        if(str3 == null){                            str7 = "";                        }else{                            str7 = str3.toUpperCase();                        }                        str8 = str4.toUpperCase();                        }                    if(!str7.equals("") && str7.equals(str6) ){                        textarea.replaceSelection(field2.getText());                    }                    k = str5.indexOf(str6,textarea.getCaretPosition());                    if(k != -1){                        textarea.setCaretPosition(k);//                        textarea.select(k, k+field1.getText().length());                    }else{                        String str9 = "找不到""+field1.getText()+""";                        JOptionPane.showMessageDialog(null, str9,"记事本",JOptionPane.WARNING_MESSAGE);                    }                }});            //全部替换按钮监听事件            buttonAll.addActionListener(new ActionListener(){                @Override                public void actionPerformed(ActionEvent arg0) {                    int k = 0;                    while(k != -1){                        String str1 , str2 , str3 , str4 ,str5 ,str6 ;                        str1 = textarea.getText();                        str2 = field1.getText();                        str3 = field2.getText();                        if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换                            str4 = str1;                            str5 = str2;                            str6 = str3;                        }else{//如果不区分大小写,则将其统一转换为大写或者小写                            str4 = str1.toUpperCase();                            str5 = str2.toUpperCase();                            str6 = str3.toUpperCase();                            }                         textarea.setCaretPosition(0);//将光标放置文本开头                        //注意循环时str4,str5值未改变,但实际应该改变,所以str4,str5应该放在循环内                        k = str4.indexOf(str5,textarea.getCaretPosition());                        if(k != (-1)){                            textarea.setCaretPosition(k);                            //textarea.select(k, k+field1.getText().length());                            //textarea.replaceSelection(field2.getText());                            textarea.replaceRange(field2.getText(), k, k+field1.getText().length());                        }                    }                }                });        }else if(e.getSource() == menu28){//设置转到事件            JOptionPane.showMessageDialog(null,"该功能尚未实现,同志仍需努力","转到",JOptionPane.INFORMATION_MESSAGE);        }else if(e.getSource() == menu29 || e.getSource() == menu65){//设置全选            textarea.selectAll();        }else if(e.getSource() == menu291){//设置日期事件            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式            textarea.insert(df.format(new Date()), textarea.getText().length());// new Date()为获取当前系统时间        }else if(e.getSource() == menu30){//设置自动转行事件            if(menu30.getState()){                textarea.setLineWrap(true);            }else{                textarea.setLineWrap(false);            }            }else if(e.getSource() == menu31){//设置字体            final JDialog fontdialog = new JDialog(this,"字体",true);

            JPanel panel1 = new JPanel();            JPanel panel2 = new JPanel();            JPanel panel3 = new JPanel();            JPanel panel4 = new JPanel();            JPanel panel5 = new JPanel();            JPanel panel6 = new JPanel();

            JLabel fontStyle = new JLabel("字体(F):");            //设置此组件的首选大小,Dimension 类封装单个对象中组件的宽度和高度(精确到整数)            //fontStyle.setPreferredSize(new Dimension(100,20));            //fontStyle.setSize(100, 20);            final JTextField textStyle = new JTextField(11);            //textStyle.setPreferredSize(new Dimension(50,20));            //GraphicsEnvironment 类描述了 Java(tm) 应用程序在特定平台上可用的 GraphicsDevice 对象和 Font 对象的集合。            //getLocalGraphicsEnvironment()返回本地 GraphicsEnvironment。             GraphicsEnvironment gre = GraphicsEnvironment.getLocalGraphicsEnvironment();            //返回一个包含此 GraphicsEnvironment 中所有字体系列名称的数组,它针对默认语言环境进行了本地化,由 Locale.getDefault() 返回。            String[] stl = gre.getAvailableFontFamilyNames();            final JList styleList = new JList(stl);            styleList.setFixedCellHeight(20);//设置一个固定值,将用于列表中每个单元的高度。            styleList.setFixedCellWidth(108);//设置一个固定值,将用于列表中每个单元的宽度。            JScrollPane scroStyle = new JScrollPane(styleList);

            JLabel fontsBold = new JLabel("字形(Y):");            final JTextField textBold = new JTextField(8);            String[] bol = {"常规","倾斜","粗体","粗体  倾斜"};            final JList boldList = new JList(bol);            boldList.setFixedCellHeight(20);//设置一个固定值,将用于列表中每个单元的高度。            boldList.setFixedCellWidth(76);//设置一个固定值,将用于列表中每个单元的宽度。            JScrollPane scroBold = new JScrollPane(boldList);            //设置滚动条一直可见            scroBold.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );

            JLabel fontSize = new JLabel("大小(S):");            final JTextField textSize = new JTextField(5);            String[] sil = {"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"};            //"初号","小初","一号","小一","二号","小二","三号","小三","四号","小四","五号","小五","六号","小六","七号","八号"现不能对应整数磅值            final JList sizeList = new JList(sil);            sizeList.setFixedCellHeight(20);//设置一个固定值,将用于列表中每个单元的高度。            sizeList.setFixedCellWidth(40);//设置一个固定值,将用于列表中每个单元的宽度。            JScrollPane scroSize = new JScrollPane(sizeList);

            final JLabel example = new JLabel("你看!");            JButton affirmButton = new JButton("确认");            JButton cancelButton = new JButton("取消");

            //panel1.setLayout(new BorderLayout());            panel1.add(fontStyle);            panel1.add(textStyle);            panel1.add(scroStyle);            panel1.setPreferredSize(new Dimension(140,250));

            //panel2.setLayout(new BorderLayout());            panel2.add(fontsBold);              panel2.add(textBold);            panel2.add(scroBold);            panel2.setPreferredSize(new Dimension(110,250));

            //panel3.setLayout(new BorderLayout());            panel3.add(fontSize);             panel3.add(textSize);            panel3.add(scroSize);            panel3.setPreferredSize(new Dimension(80,250));

            panel4.setLayout(new FlowLayout());            panel4.add(panel1); panel4.add(panel2); panel4.add(panel3);

            panel5.add(example);            panel5.setBorder(BorderFactory.createTitledBorder("示例"));            panel5.setPreferredSize(new Dimension(250,120));

            //panel6.setLayout(new GridLayout(1,2));            panel6.add(affirmButton); panel6.add(cancelButton);            panel6.setPreferredSize(new Dimension(250,50));

            fontdialog.setLayout(new FlowLayout());            fontdialog.add(panel4); fontdialog.add(panel5); fontdialog.add(panel6);

            //取消按钮事件                    cancelButton.addActionListener(new ActionListener(){                @Override                public void actionPerformed(ActionEvent e) {                    fontdialog.dispose();                }            });            Font currentFont = textarea.getFont();            textStyle.setText(currentFont.getFontName());            textStyle.selectAll();            String str = String.valueOf(currentFont.getStyle());//返回 int 参数的字符串表示形式。             textBold.setText(str);            textBold.selectAll();            String str1 = String.valueOf(currentFont.getSize());            textSize.setText(str1);            //设置textStyle对应的字体表示            if(currentFont.getStyle()==Font.PLAIN){                 textBold.setText("常规");              }else if(currentFont.getStyle()==Font.BOLD){                 textBold.setText("粗体");              }else if(currentFont.getStyle()==Font.ITALIC){                  textBold.setText("斜体");             }else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC)){                textBold.setText("粗斜体");              }            //根据文本域字体初始值设置boldList选中下标索引值,不然当boldList未选中时。其下标值为-1;            if(currentFont.getStyle()==Font.PLAIN){                 boldList.setSelectedIndex(0);             }else if(currentFont.getStyle()==Font.BOLD){                 boldList.setSelectedIndex(1);              }else if(currentFont.getStyle()==Font.ITALIC){                  boldList.setSelectedIndex(2);             }else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC)){                boldList.setSelectedIndex(3);             }            //定义一个数组,其下标值对应字体格式style            final int style[] = {Font.PLAIN,Font.BOLD,Font.ITALIC,Font.BOLD+Font.ITALIC};            styleList.addListSelectionListener(new ListSelectionListener(){//字体名称列表事件                @Override

                public void valueChanged(ListSelectionEvent e) {                    // getSelectedValue()返回最小的选择单元索引的值;只选择了列表中单个项时,返回所选值                    textStyle.setText((String) styleList.getSelectedValue());                    //textStyle.selectAll();                    //根据指定名称、样式和磅值大小,创建一个新 Font。                    System.out.println();                    example.setFont(new Font(textStyle.getText(),style[boldList.getSelectedIndex()],Integer.parseInt(textSize.getText())));                }            });

            boldList.addListSelectionListener(new ListSelectionListener(){//字体格式列表事件                @Override

                public void valueChanged(ListSelectionEvent e) {                    // getSelectedValue()返回最小的选择单元索引的值;只选择了列表中单个项时,返回所选值                    textBold.setText((String) boldList.getSelectedValue());                    //textStyle.selectAll();                    example.setFont(new Font(textStyle.getText(),style[boldList.getSelectedIndex()],Integer.parseInt(textSize.getText())));                }            });

            sizeList.addListSelectionListener(new ListSelectionListener(){//字体尺寸列表事件                @Override

                public void valueChanged(ListSelectionEvent e) {                    // getSelectedValue()返回最小的选择单元索引的值;只选择了列表中单个项时,返回所选值                    textSize.setText((String) sizeList.getSelectedValue());                    //textStyle.selectAll();                    example.setFont(new Font(textStyle.getText(),style[boldList.getSelectedIndex()],Integer.parseInt(textSize.getText())));                }            });

            affirmButton.addActionListener(new ActionListener(){//确定按钮                @Override                public void actionPerformed(ActionEvent e) {                    // TODO Auto-generated method stub                    textarea.setFont(example.getFont());                    fontdialog.dispose();                }            });            fontdialog.setSize(380, 460);            fontdialog.setLocation(500,500);            fontdialog.setResizable(false);            fontdialog.setVisible(true);        }else if(e.getSource() == menu40){            if(menu40.getState()){                statusBar.setVisible(true);            }else{                statusBar.setVisible(false);            }            //JOptionPane.showMessageDialog(null, "非常遗憾,该功能我不会O(∩_∩)O","状态栏",JOptionPane.WARNING_MESSAGE);        }else if(e.getSource() == menu50){            JOptionPane.showMessageDialog(null, "非常抱歉,没人可以帮助你,放弃吧","帮助",JOptionPane.WARNING_MESSAGE);        }else if(e.getSource() == menu51){            JOptionPane.showMessageDialog(null, "秋山寒叶似飘零,南国归雁北国情&春风缱绻月西楼,独倚空楼寄闲愁。"+" "                    +"谁家东窗难掩愁,随风飘到声尽头。&空山久待降飞霜,朔夜孤寒裹银装。"+" "                    +"&久闻此山慕名临,长叹他乡唏嘘离。&空城败旗倒金戈,万家灯火向谁国。"+" "                    +"&浮生偷得半日闲,细温红楼把酒沾。&暗夜香袭床前枕,古曲悠悠落雨声。",                    "状态栏",JOptionPane.INFORMATION_MESSAGE);        }    }}



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有