【Java练习】文本处理:写一个简单文本编辑器

需求

一个简单的文本编辑器,能读取文件和保存文件,能高亮对应单词

思路

写一个窗体程序,程序里添加文件读取和保存
使用DefaultHighlighter做单词的高亮,目前就做固定单词高亮

实现

public class TextEditor extends JFrame implements ActionListener {

    private JTextArea textArea;
    private JFileChooser fileChooser;

    public TextEditor() {
        //框架
        setTitle("文本编辑器");
        setSize(800, 600);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //文本区
        textArea = new JTextArea();
        JScrollPane scrollPane = new JScrollPane(textArea);
        add(scrollPane, BorderLayout.CENTER);

        //菜单
        JMenuBar menuBar = new JMenuBar();

        JMenu fileMenu = new JMenu("文件");
        JMenuItem openItem = new JMenuItem("打开");
        JMenuItem saveItem = new JMenuItem("保存");
        JMenuItem exitItem = new JMenuItem("退出");

        openItem.addActionListener(this);
        saveItem.addActionListener(this);
        exitItem.addActionListener(this);


        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.add(exitItem);
        menuBar.add(fileMenu);

        setJMenuBar(menuBar);

        //文件选择器
        fileChooser = new JFileChooser();

        //高亮功能
        textArea.addCaretListener(e -> highlightWords());

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        switch (command) {
            case "打开":
                openFile();
                break;
            case "保存":
                saveFile();
                break;
            case "退出":
                System.exit(0);
                break;
        }
    }

    private void openFile() {
        int state = fileChooser.showOpenDialog(this);
        if (state == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
                textArea.read(reader,null);
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this,"打开文件时出现了问题" + ex.getMessage(),
                        "啊偶",JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    private void saveFile() {
        int state = fileChooser.showSaveDialog(this);
        if(state == JFileChooser.APPROVE_OPTION){
            File file = fileChooser.getSelectedFile();
            try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
                textArea.write(writer);
            }catch (IOException ex){
                JOptionPane.showMessageDialog(this,"保存文件时出现了问题" + ex.getMessage(),
                        "啊偶",JOptionPane.ERROR_MESSAGE);
            }
        }
    }


    public void highlightWords() {
        textArea.getHighlighter().removeAllHighlights();
        //所有文本
        String text = textArea.getText();
        //高亮单词
        String[] keyWords = {"Public", "World"};
        //做一个高亮单词的循环
        for(String key : keyWords){
            int index = text.indexOf(key);
            DefaultHighlighter.DefaultHighlightPainter painter =
                    new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE);
            while(index >= 0){
                try {
                    //绘制高亮
                    textArea.getHighlighter().addHighlight(index, index + key.length(), painter);
                    //下一个
                    index = text.indexOf(key, index + 1);
                } catch (BadLocationException e) {
                    System.out.println("高亮出问题了:" + e.getMessage());
                }
            }
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            TextEditor editor = new TextEditor();
            editor.setVisible(true);
        });
    }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值