Java记事本

最近用Centos7学习Linux,但习惯了Windows 10的我完全用不惯Centos7的Vim及Emacs等文本编辑软件,这时候想到不如用Java编个记事本,说干就干,花了一晚上加一下午,就编好了,程序5月29号就编好了,自己试用了大半个月,感觉还不错,看网上也没啥比较完善的Java记事本源码,不如拿出来跟大家交流交流,欢迎提意见,本人大一,难免学艺不精,大家就当做参考吧,源码如下:

import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import java.awt.event.*;
import java.net.*;
public class MyNotePad {
    private JFrame frame;
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MyNotePad window = new MyNotePad();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    public MyNotePad() {
        initialize();
    }
    private void initialize() {
        String jarFilePath = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
        String[] jarFilePathtemp = jarFilePath.split("/");
        jarFilePath = "/";
        for (int i = 1; i < jarFilePathtemp.length - 1; i++) {
            jarFilePath += jarFilePathtemp[i] + "/";
        }
        // URL Decoding
        try {
            jarFilePath = java.net.URLDecoder.decode(jarFilePath, "UTF-8");
        } catch (UnsupportedEncodingException e2) {
            e2.printStackTrace();
        }

        File f = new File(jarFilePath + "新建文本文档.txt");
        int i = 1;
        while (f.exists()) {
            f = new File(jarFilePath + "新建文本文档" + String.valueOf(i) + ".txt");
            i++;
        }
        final File path = f.getParentFile();

        Toolkit tool = Toolkit.getDefaultToolkit();
        Image tubiao = tool.getImage(this.getClass().getResource("/image/jishibentubiao.jpg"));

        frame = new JFrame(f.getName() + " - 记事本");
        frame.setBounds(100, 100, 800, 800);
        frame.setIconImage(tubiao);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new BorderLayout(0, 0));

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); // 系统风格
        } catch (Throwable e) {
            e.printStackTrace();
        }

        JScrollPane scrollPane = new JScrollPane();
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

        JScrollBar gdtheng = scrollPane.getHorizontalScrollBar(); // 获取横向滚动条
        gdtheng.setBackground(Color.WHITE);
        gdtheng.setForeground(Color.LIGHT_GRAY);

        JScrollBar gdtshu = scrollPane.getVerticalScrollBar();// 获取竖向滚动条
        gdtshu.setBackground(Color.WHITE);
        gdtshu.setForeground(Color.LIGHT_GRAY);

        JTextArea textArea = new JTextArea();
        textArea.setLineWrap(true);
        textArea.setFont(new Font("宋体", Font.PLAIN, 19));
        scrollPane.setViewportView(textArea);

        JMenuBar menuBar = new JMenuBar();
        menuBar.setBackground(Color.WHITE);
        menuBar.setFont(new Font("宋体", Font.PLAIN, 20));
        frame.setJMenuBar(menuBar);

        JMenu mnNewMenu = new JMenu("\u6587\u4EF6(F)");
        mnNewMenu.setForeground(Color.BLACK);
        mnNewMenu.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        menuBar.add(mnNewMenu);
        mnNewMenu.setMnemonic(KeyEvent.VK_F);

        JMenuItem mntmNewMenuItem = new JMenuItem("\u4FDD\u5B58(S)");// save
        mntmNewMenuItem.setForeground(Color.BLACK);
        mntmNewMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        mntmNewMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String jarFilePath = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
                String[] jarFilePathtemp = jarFilePath.split("/");
                jarFilePath = "/";
                for (int i = 1; i < jarFilePathtemp.length - 1; i++) {
                    jarFilePath += jarFilePathtemp[i] + "/";
                }
                String temp = jarFilePath + frame.getTitle();
                String[] temp2 = temp.split(" ");
                if (temp2[0].equals(jarFilePath + "无标题")) {
                    JFileChooser fileChooser = new JFileChooser(); // 选择文件
                    FileSystemView fsv = FileSystemView.getFileSystemView();
                    fileChooser.setCurrentDirectory(path); // 设置为当前目录
                    fileChooser.showOpenDialog(frame); // 显示文件选择框,以frame为容器
                    File out = fileChooser.getSelectedFile();
                    if (!out.exists()) {
                        try {
                            out.createNewFile();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    try {
                        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(out)));
                        String text = textArea.getText();
                        String[] textout = text.split("\n");
                        for (int i = 0; i < textout.length; i++) {
                            bw.write(textout[i]);
                            bw.newLine();
                        }

                        frame.setTitle(out.getName());
                        bw.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else {
                    File out;
                    try {
                        out = new File(URLDecoder.decode(temp2[0], "UTF-8"));// URL解码
                        if (!out.exists()) {
                            try {
                                out.createNewFile();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        try {
                            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(out)));
                            String text = textArea.getText();
                            String[] textout = text.split("\n");
                            for (int i = 0; i < textout.length; i++) {
                                bw.write(textout[i]);
                                bw.newLine();
                            }
                            bw.close();
                        } catch (Exception e) {

                            e.printStackTrace();
                        }
                    } catch (UnsupportedEncodingException e1) {

                        e1.printStackTrace();
                    }

                }

            }
        });

        JMenuItem mntmn = new JMenuItem("\u65B0\u5EFA(N)");// new
        mntmn.setForeground(Color.BLACK);
        mntmn.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        mnNewMenu.add(mntmn);
        mntmn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                frame.setTitle("无标题 - 记事本");
                textArea.setText(null);
            }
        });

        JMenuItem mntmo = new JMenuItem("\u6253\u5F00(O)...");// open
        mntmo.setForeground(Color.BLACK);
        mntmo.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        mntmo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JFileChooser fileChooser = new JFileChooser(); // 选择文件
                FileSystemView fsv = FileSystemView.getFileSystemView();
                fileChooser.setCurrentDirectory(path); // 设置为当前目录
                fileChooser.showOpenDialog(frame); // 显示文件选择框,以frame为容器
                File fin = fileChooser.getSelectedFile();
                BufferedReader br;
                try {
                    frame.setTitle(fin.getName() + " - 记事本");
                    br = new BufferedReader(new InputStreamReader(new FileInputStream(fin), "utf-8"));
                    String temp = null, textin = "";
                    while ((temp = br.readLine()) != null) {
                        textin += temp;
                        textin += "\n";
                    }
                    textArea.setText(textin);
                } catch (UnsupportedEncodingException | FileNotFoundException e1) {

                    e1.printStackTrace();
                } catch (IOException e1) {

                    e1.printStackTrace();
                }

            }
        });
        mnNewMenu.add(mntmo);
        mnNewMenu.add(mntmNewMenuItem);

        JMenuItem mntma = new JMenuItem("\u53E6\u5B58\u4E3A(A)...");// save
                                                                    // otherpath
        mntma.setForeground(Color.BLACK);
        mntma.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        mnNewMenu.add(mntma);
        mntma.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JFileChooser fileChooser = new JFileChooser(); // 选择文件
                FileSystemView fsv = FileSystemView.getFileSystemView();
                fileChooser.setCurrentDirectory(path); // 设置为当前目录
                fileChooser.showOpenDialog(frame); // 显示文件选择框,以frame为容器
                File out = fileChooser.getSelectedFile();
                if (!out.exists()) {
                    try {
                        out.createNewFile();
                    } catch (IOException e) {

                        e.printStackTrace();
                    }
                }
                try {
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(out)));
                    String text = textArea.getText();
                    String[] textout = text.split("\n");
                    for (int i = 0; i < textout.length; i++) {
                        bw.write(textout[i]);
                        bw.newLine();
                    }

                    frame.setTitle(out.getName());
                    bw.close();
                } catch (Exception e) {

                    e.printStackTrace();
                }
            }
        });

        JMenuItem mntmx = new JMenuItem("\u9000\u51FA(X)");// exit
        mntmx.setForeground(Color.BLACK);
        mntmx.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        mntmx.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object[] options = { "确定", "取消" };
                int response = JOptionPane.showOptionDialog(frame, "确定退出?", "记事本", JOptionPane.YES_OPTION,
                        JOptionPane.DEFAULT_OPTION, null, options, options[0]);
                if (response == 0) {
                    System.exit(0);
                } else if (response == 1) {
                }
            }
        });
        mnNewMenu.add(mntmx);

        JMenu mno = new JMenu("\u683C\u5F0F(O)");
        mno.setForeground(Color.BLACK);
        mno.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        menuBar.add(mno);
        mno.setMnemonic(KeyEvent.VK_O);

        JMenu mnNewMenu_1 = new JMenu("\u5E2E\u52A9(H)");
        mnNewMenu_1.setForeground(Color.BLACK);
        mnNewMenu_1.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        menuBar.add(mnNewMenu_1);
        mnNewMenu_1.setMnemonic(KeyEvent.VK_H);

        JMenuItem mntmNewMenuItem_1 = new JMenuItem("\u5173\u4E8E\u8BB0\u4E8B\u672C(A)");
        mntmNewMenuItem_1.setForeground(Color.BLACK);
        mntmNewMenuItem_1.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        mntmNewMenuItem_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame, "软件名:记事本\n制作时间:2017年5月29日\n制作人:牧羊人907", "关于“记事本”",
                        JOptionPane.PLAIN_MESSAGE);
            }
        });
        mntmNewMenuItem_1.setMnemonic('A');
        mnNewMenu_1.add(mntmNewMenuItem_1);

        JMenuItem menuItem = new JMenuItem("\u8BF4\u660E");
        menuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JOptionPane.showMessageDialog(frame,
                        "Ⅰ、该款记事本由Java编写,支持跨平台使用(实测支持Windows 10、Centos 7)\nⅡ、支持快捷键操作,界面较为美观,功能比较完善\nⅢ、由于开发周期短,难免存在Bug,有任何问题请与作者交流QQ:907097904",
                        "“记事本”说明", JOptionPane.PLAIN_MESSAGE);
            }
        });
        mnNewMenu_1.add(menuItem);

        JCheckBoxMenuItem chckbxw = new JCheckBoxMenuItem("\u81EA\u52A8\u6362\u884C(W)");
        chckbxw.setSelected(true);
        chckbxw.setForeground(Color.BLACK);
        chckbxw.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        // 自动换行
        chckbxw.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                textArea.setLineWrap(chckbxw.isSelected());
            }
        });
        chckbxw.setMnemonic('W');
        chckbxw.setHorizontalAlignment(SwingConstants.LEFT);
        mno.add(chckbxw);

        JMenuItem mntmf = new JMenuItem("\u5B57\u4F53(F)...");
        mntmf.setForeground(Color.BLACK);
        mntmf.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        mntmf.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JFrame tanchu = new JFrame("字体选择");

                JComboBox fontList = new JComboBox();
                GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
                String[] fonts = ge.getAvailableFontFamilyNames();
                DefaultComboBoxModel fontModel = new DefaultComboBoxModel(fonts);
                fontList.setModel(fontModel);
                fontList.setVisible(true);

                tanchu.setBounds(frame.getBounds().x, frame.getBounds().y, 400, 300);
                tanchu.getContentPane().setLayout(null);
                tanchu.getContentPane().add(fontList);
                fontList.setBounds(20, 50, 220, 25);

                JLabel label = new JLabel("\u5B57\u4F53");
                label.setBounds(20, 25, 50, 25);
                tanchu.getContentPane().add(label);

                JLabel label_1 = new JLabel("\u98CE\u683C");
                label_1.setBounds(20, 75, 72, 25);
                tanchu.getContentPane().add(label_1);

                JLabel label_2 = new JLabel("\u5B57\u53F7");
                label_2.setBounds(20, 125, 72, 25);
                tanchu.getContentPane().add(label_2);

                JComboBox comboBox = new JComboBox();
                comboBox.setModel(new DefaultComboBoxModel(
                        new String[] { "\u5E38\u89C4", "\u503E\u659C", "\u7C97\u4F53", "\u7C97\u504F\u659C\u4F53" }));
                comboBox.setBounds(20, 100, 80, 25);
                tanchu.getContentPane().add(comboBox);

                Object[] FontSize = new Object[71];
                for (int i = 0; i < 71; i++) {
                    FontSize[i] = i + 1;
                }
                JComboBox comboBox_1 = new JComboBox();
                comboBox_1.setBounds(20, 150, 60, 25);
                comboBox_1.setModel(new DefaultComboBoxModel(FontSize));
                tanchu.getContentPane().add(comboBox_1);
                comboBox_1.setSelectedIndex(17);

                JButton btnNewButton = new JButton("\u786E\u5B9A");
                btnNewButton.setBounds(100, 175, 75, 25);
                tanchu.getContentPane().add(btnNewButton);
                btnNewButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        String Fontname = fontList.getSelectedItem().toString();
                        int FontStyle = comboBox.getSelectedIndex();
                        int FontSize = comboBox_1.getSelectedIndex() + 1;
                        textArea.setFont(new Font(Fontname, FontStyle, FontSize));
                        tanchu.dispose();
                    }
                });
                JButton btnNewButton_1 = new JButton("\u6062\u590D\u9ED8\u8BA4\u503C");
                btnNewButton_1.setBounds(190, 175, 113, 25);
                tanchu.getContentPane().add(btnNewButton_1);
                btnNewButton_1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        textArea.setFont(new Font("宋体", 0, 19));
                        tanchu.dispose();
                    }
                });

                tanchu.setVisible(true);
                tanchu.setDefaultCloseOperation(1);
            }
        });
        mno.add(mntmf);

    }
}

打包的jar地址也放上吧
链接:http://pan.baidu.com/s/1dFIiiFv 密码:eyv0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值