简易文本编辑器

介绍

这是一个我一年多前写的一个小程序,因为前段时间时间电脑出来了点问题,担心以后也找不回来,所以放到博客上,并且和大家分享。这是一个用 java语言去模仿WIN10自带的文本编辑器,实现了基本的文本编辑器的功能。在写文本编辑器的过程有借鉴过一些文章,如果有侵犯到你的利益,请联系我。

开发环境

这里我用的是IDEA,主要用了java的swing来实现界面化。

运行时的截图

这是打开系统文件

保存文件和打开文件是差不多的,这里就不演示了
在这里插入图片描述

编辑文本

这是编辑文本的功能,包括复制,粘贴和剪切
在这里插入图片描述

核心代码

这里只给大家贴出比较核心的代码,完整代码的链接文末

FileManage类

import java.io.*;

/**
 * 该类是文件管理类,负责文件的读取和保存
 */
public class FileManage {
    /**
     *读取文件内容,以字符串的形式返回
     */
    public String read(File file) {
        try {
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(new FileInputStream(file)));
            int len = (int) file.length();
            char[] buffer = new char[len];
            br.read(buffer, 0, len);
            br.close();
            return new String(buffer);
        }catch(Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     *将写在编辑器里的内容保存在相应的文件里
     */
    public void save(File file, String text) {
        try {
            BufferedWriter bw = new BufferedWriter(
                    new OutputStreamWriter(new FileOutputStream(file)));
            bw.write(text);
            bw.close();
        }catch(Exception ex) {
            ex.printStackTrace();
        }

    }

}

界面类

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;

@SuppressWarnings({"serial", "unused"})
public class View extends JFrame {

    File file = null;
    Color color = Color.black;
    FileManage fileManage = null;

    public View(FileManage fileManage) {
        this.fileManage = fileManage;
        Menu();
        Panel();
        AboutDialog();
    }

    //制作一个可以滑动的文本框
    JTextPane text = new JTextPane();

    private void Panel() {
        getContentPane().add(new JScrollPane(text));
    }

    JMenuBar menubar = new JMenuBar();
    JFileChooser filechooser = new JFileChooser();
    JDialog about = new JDialog();

    JMenu[] menus = new JMenu[]{
            new JMenu("文件"),
            new JMenu("编辑"),
            new JMenu("帮助"),
            new JMenu("退出"),
    };
    JMenuItem[][] menuitems = new JMenuItem[][]{
            {
                    new JMenuItem("打开"),
                    new JMenuItem("保存"),
            },
            {
                    new JMenuItem("复制"),
                    new JMenuItem("剪切"),
                    new JMenuItem("粘贴"),
            },
            {
                    new JMenuItem("关于"),
            },
            {
                    new JMenuItem("退出"),
            },
    };
    /**
    *建造菜单,这是一个二级菜单
     */
    void Menu() {
        for (int i = 0; i < menus.length; i++) {
            menubar.add(menus[i]);
            for (int j = 0; j < menuitems[i].length; j++) {
                menus[i].add(menuitems[i][j]);
                menuitems[i][j].addActionListener(action);
            }
        }
        this.setJMenuBar(menubar);
    }

    ActionListener action = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            JMenuItem mi = (JMenuItem) e.getSource();
            String id = mi.getText();
            if ("打开".equals(id)) {
                filechooser.setDialogTitle("打开文件");
                if (file != null) {
                    filechooser.setSelectedFile(file);
                }
                int returnVal = filechooser.showOpenDialog(
                        View.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    file = filechooser.getSelectedFile();
                    openFile();
                }
                /*第二种方法打开文件选择框
                filechooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
                filechooser.showDialog(new JLabel(), "打开");
                if(file.isDirectory()){
                    System.out.println("文件夹:"+file.getAbsolutePath());
                }else if(file.isFile()){
                    System.out.println("文件:"+file.getAbsolutePath());
                }
                System.out.println(filechooser.getSelectedFile().getName());
                 */
            } else if ("保存".equals(id)) {
                filechooser.setDialogTitle("保存文件");
                if (file != null) {
                    filechooser.setSelectedFile(file);
                }
                int returnVal = filechooser.showOpenDialog(
                        View.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    file = filechooser.getSelectedFile();
                    saveFile();
                }
            } else if ("退出".equals(id)) {
                System.exit(0);
            } else if ("剪切".equals(id)) {
                text.cut();
            } else if ("复制".equals(id)) {
                text.copy();
            } else if ("粘贴".equals(id)) {
                text.paste();
            } else if ("关于".equals(id)) {
                AboutDialog();
                about.setSize(200, 100);
                about.setVisible(true);
            }
        }
    };

    void openFile() {
        String content = fileManage.read(file);
        text.setText(content);
    }

    void saveFile() {
        String content = text.getText();
        fileManage.save(file, content);
    }

    void AboutDialog(){
        about.getContentPane().add(new JLabel("https://www.microsoft.com/zh-cn/"));
        about.setModal(true);
        about.setSize(100, 50);
    }
}

完整代码链接

github: 简易文本编辑器.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值