JAVA简单记事本的实现

第一步   给窗口添加文本输入框
第二步   给窗口添加菜单栏选项并且加上监听
第三步   如何打开文件,保存文件,新建文件,另存为文件
第四步   实现复制,粘贴,剪切,删除,撤销功能 

第一步:给窗口添加文本输入框

TextArea ta = new TextArea();
Font font = new Font("宋体", Font.PLAIN, 15);// 设置字体
ta.setFont(font);
JScrollPane jsp = new JScrollPane(ta);// 将文本框加给JScrollPane视图
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);/// 添加垂直滚条

第二步:添加菜单和监听(该类直接继承JFfame类和ActionListener接口)

JMenuBar jmBar = new JMenuBar();// 菜单选项
JMenu menu1 = new JMenu("文件(F)");// 创建菜单条
menu1.setMnemonic('F');// 设置快捷键Alt + f

JMenuItem item0 = new JMenuItem("新建");
item0.setActionCommand("Create");
item0.addActionListener(this);

menu1.add(item0);// 给menu1菜单条加上选项

//依次类推加上打开,保存等...

jmBar.add(menu1);// 将菜单条加给jmBar菜单

重点内容
第三步:如何实现打开文件,新建文件,保存文件,另存为文件
这里用到FileDialog文件对话框,和IO输入输出流(可以查看之前的博客)。

public void SaveOtherFile() throws IOException {// 另存为文件
        FileDialog fd1 = new FileDialog(this, "另存为文件", FileDialog.SAVE);//括号第一个为窗体对象
        fd1.setFile("*.txt");
        fd1.setVisible(true);
        // 创建流
        OutputStream os = new FileOutputStream(fd1.getDirectory() + fd1.getFile());
        // 获取所需要的内容

        os.write(neirong.getBytes("gbk"));
        os.flush();// 刷新流
        os.close();// 关闭流
        fd = null;//另存为文件之后,将fd对象变成空,避免bug
    }

    public void SaveFile() throws IOException {// 保存文件
        // 创建流
        OutputStream os = new FileOutputStream(fd.getDirectory() + fd.getFile());
        // 获取所需要的内容
        neirong = ta.getText();
        os.write(neirong.getBytes("gbk"));
        os.flush();// 刷新流
        os.close();// 关闭流
    }

    public void openFile() throws IOException {// 打开文件
        // 创建文件对话框
        fd = new FileDialog(this, "打开文件", FileDialog.LOAD);
        fd.setFile("*.txt");// 过滤文件(只显示后缀为txt的文件)
        fd.setVisible(true);// 设置可见
        // 创建流
        InputStream is = new FileInputStream(fd.getDirectory() + fd.getFile());
        byte[] bytes = new byte[is.available()];
        is.read(bytes);
        String str = new String(bytes);// 将读取的内容进行处理
        ta.setText(str);
        is.close();// 关闭流
    }

新建文件就将文本内容置为空就行了 ta.setText(null);
第四步,复制,粘贴,剪切,撤销,删除
这里用到系统的剪贴板
private Clipboard clipboard = getToolkit().getSystemClipboard();// 获取系统的剪贴板

public void Copy() {// 复制
        // 拖动选取文本
        String temp = this.ta.getSelectedText();
        // 把获取的内容复制到连续字符器,这个类继承了剪贴板接口
        StringSelection text = new StringSelection(temp);
        // 把内容放在剪贴板
        this.clipboard.setContents(text, null);
    }

    public void Shear() {// 剪切
        // 拖动选取文本
        String temp = this.ta.getSelectedText();
        // 把获取的内容复制到连续字符器,这个类继承了剪贴板接口
        StringSelection text = new StringSelection(temp);
        // 把内容放在剪贴板
        this.clipboard.setContents(text, null);
        // 标记开始位置
        int start = ta.getSelectionStart();
        // 标记结束位置
        int end = ta.getSelectionEnd();
        // 删除所选段
        ta.replaceRange("", start, end);
    }

    public void Paste() throws UnsupportedFlavorException, IOException {// 粘贴
        // Transferable接口,把剪贴板的内容转换成数据
        Transferable contents = clipboard.getContents(this);
        // DataFalvor类判断是否能把剪贴板内容转换成所需数据类型
        DataFlavor flavor = DataFlavor.stringFlavor;
        // 如果可以转换
        if (contents.isDataFlavorSupported(flavor)) {
            String str;
            // 开始转换
            str = (String) contents.getTransferData(flavor);
            // 如果要粘贴时,鼠标已经选取了一段字符
            if (ta.getSelectedText() != null) {
                // 定位被选中字符开始位置
                int start = ta.getSelectionStart();
                // 定位被选中字符结束位置
                int end = ta.getSelectionEnd();
                // 替换被选中内容
                ta.replaceRange(str, start, end);
            } else {
                // 获取鼠标所在TextArea的位置
                int mouse = ta.getCaretPosition();
                // 在鼠标所在位置粘贴内容
                ta.insert(str, mouse);
            }
        }
    }

    public void Delete() {//删除
        // 定位被选中字符开始位置
        int start = ta.getSelectionStart();
        // 定位被选中字符结束位置
        int end = ta.getSelectionEnd();
        // 替换被选中内容
        ta.replaceRange("", start, end);
    }

撤销功能用TextArea还没找到方法。不过使用JTextArea可以实现

        UndoManager um = new UndoManager();
        JTextArea jta = new JTextArea();
        jta.getDocument().addUndoableEditListener(um);//把撤销管理器的监听器添加到JTextArea中
        um.undo();//撤销的时候调用这个方法

猜你喜欢

转载自blog.csdn.net/lzq1326253299/article/details/81981106