简单文本编辑器

简单文本编辑器。该程序可以新建、打开、编辑和保存文本文件。当用户点击New时,新建一个文件,用户可以编辑文件内容,然后点击Save保存文件。用户点击Open时,选择一个已有文件,然后可对文件进行编辑。示例输出如图所示。

package priv.lhw.text.editor;

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

public class TextEditorFrame extends JFrame {
    JTextArea jTextArea = new JTextArea(30, 40);
    public TextEditorFrame(){
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension screenSize = toolkit.getScreenSize();
        int screenHeight = screenSize.height;
        int screenWidth = screenSize.width;

        setSize(screenWidth/2, screenHeight/2);

        int x = (screenWidth - getWidth()) / 2;
        int y = (screenHeight - getHeight()) / 2;
        setLocation(x, y);
        setTitle("Text Editor");

        setJMenuBar(new TextEditorMenu(this, jTextArea));

        add(new JScrollPane(jTextArea));
    }
}

package priv.lhw.text.editor;

import javax.swing.*;

public class TextEditorMenu extends JMenuBar {
    JFrame jFrame;
    JTextArea jTextArea;
    public TextEditorMenu(JFrame jFrame, JTextArea jTextArea){
        this.jFrame = jFrame;
        this.jTextArea = jTextArea;
        add(new TextEditorMenuFile(jFrame, jTextArea));

    }
}

package priv.lhw.text.editor;

import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
public class TextEditorMenuFile extends JMenu {
    String path;
    JMenuItem neww;
    JMenuItem open;
    JMenuItem save;
    JMenuItem exit;
    JFrame jFrame;
    private JFileChooser jFileChooser;
    JTextArea jTextArea;

    public TextEditorMenuFile(JFrame jFrame, JTextArea jTextArea){
        super("File");
        initNew();
        initOpen();
        initSave();
        initExit();
        this.jFrame = jFrame;
        this.jTextArea = jTextArea;
        jFileChooser = new JFileChooser();
        path = ".";
    }

    private void initNew(){
        neww = new JMenuItem("New");
        neww.addActionListener(new FileNewListener());
        add(neww);
    }

    private void initOpen(){
        open = new JMenuItem("Open");
        open.addActionListener(new FileOpenListener());
        add(open);
    }

    private void initSave(){
        save = new JMenuItem("Save");
        save.addActionListener(new FileSaveListener());
        add(save);
    }

    private void initExit(){
        exit = new JMenuItem("Exit");

        exit.addActionListener(e -> System.exit(0));
        add(exit);
    }

    private class FileOpenListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            jFileChooser.setCurrentDirectory(new File("."));
            TextFileFilter fileFilter = new TextFileFilter();
            jFileChooser.setFileFilter(fileFilter);
            jFileChooser.showOpenDialog(jFrame);


            String fileName = jFileChooser.getSelectedFile().getPath();

            jTextArea.setText("");
            jFrame.setTitle(fileName);

            File file = jFileChooser.getSelectedFile();
            path = file.getPath();
            FileReader fileReader = null;
            try{
                try {
                    fileReader = new FileReader(file);
                    char[] buf = new char[(int)file.length()];
                    int len = fileReader.read(buf);
                    jTextArea.append(new String(buf, 0, len));
                } finally {
                    assert fileReader != null;
                    fileReader.close();
                }
            } catch (IOException exception){
                exception.printStackTrace();
            }
        }


    }

    public class FileSaveListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            jFileChooser.setCurrentDirectory(new File(path));
            TextFileFilter filter = new TextFileFilter();
            jFileChooser.setFileFilter(filter);
            jFileChooser.showSaveDialog(jFrame);
            jFileChooser.setSelectedFile(new File("new.txt"));

            File file = jFileChooser.getSelectedFile();
            if (!file.exists()){
                try {
                    file.createNewFile();
                } catch (IOException exception) {
                    exception.printStackTrace();
                }
            }
            try {
                FileOutputStream out = new FileOutputStream(file);
                out.write(jTextArea.getText().trim().getBytes());
                out.close();
            } catch (Exception exception) {
                exception.printStackTrace();
            }

        }
    }

    public class TextFileFilter extends FileFilter{
        @Override
        public String getDescription() {
            return "文本文件(.txt)";
        }

        @Override
        public boolean accept(File f) {
            if (f.isDirectory()){
                return true;
            }
            String name = f.getName().toLowerCase();
            return name.endsWith(".txt");
        }
    }

    public class FileNewListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            jTextArea.setText("");
            jFrame.setTitle("new");
        }
    }
}
package priv.lhw.text.editor;

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

public class Tool {
    public static void setUiFont() {
        Font f = new Font("SansSerif", Font.PLAIN, 20);
        String[] names = { "Label", "CheckBox", "PopupMenu", "MenuItem", "CheckBoxMenuItem", "JRadioButtonMenuItem",
                "ComboBox", "Button", "Tree", "ScrollPane", "TabbedPane", "EditorPane", "TitledBorder", "Menu",
                "TextArea", "OptionPane", "MenuBar", "ToolBar", "ToggleButton", "ToolTip", "ProgressBar", "TableHeader",
                "Panel", "List", "ColorChooser", "PasswordField", "TextField", "Table", "Label", "Viewport",
                "RadioButtonMenuItem", "RadioButton", "DesktopPane", "InternalFrame" };
        for (String item : names) {
            UIManager.put(item + ".font", f);
        }
    }
}

package priv.lhw.text.editor;
import javax.swing.*;
import java.awt.*;

public class Main {

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            Tool.setUiFont();
            TextEditorFrame textEditorFrame = new TextEditorFrame();
            textEditorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            textEditorFrame.setVisible(true);
        });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值