用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

网上的记事本

2017-08-28 作者:举报

[java]代码库

package textz;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;


public class notepad extends JFrame {

    private static final long serialVersionUID = 1L;
    private JTextArea ja = new JTextArea(5, 6);
    String str;
    private String filePath;
    private String fileName;

    // 自动换行和状态栏
    int a = 0;
    boolean flag = false;

    public notepad() {

        super("记事本");
        this.setSize(768, 384);
        this.setLocationRelativeTo(null);

        // 菜单栏
        JMenu wj = new JMenu();
        wj.setText("文件");
        JMenu bj = new JMenu("编辑");
        JMenu gs = new JMenu("格式");
        JMenu ck = new JMenu("查看");
        JMenu bz = new JMenu("帮助");

        // 工具栏
        JMenuBar gjl = new JMenuBar();

        // 菜单项定义
        final JMenuItem open = new JMenuItem();
        open.setText("打开");
        JMenuItem New = new JMenuItem();
        New.setText("新建");
        JMenuItem save = new JMenuItem();
        save.setText("保存");
        final JMenuItem saveas = new JMenuItem();
        saveas.setText("另存为…");
        JMenuItem exit = new JMenuItem();
        exit.setText("退出");
        final JMenuItem copy = new JMenuItem();
        copy.setText("复制");
        final JMenuItem cut = new JMenuItem();
        cut.setText("剪切");
        JMenuItem paste = new JMenuItem();
        paste.setText("粘贴");
        final JMenuItem selectall = new JMenuItem();
        selectall.setText("全选");
        JMenuItem auto = new JMenuItem();
        auto.setText("自动换行");
        final JMenuItem font = new JMenuItem();
        font.setText("字体");
        JMenuItem about = new JMenuItem();
        about.setText("关于记事本…");
        JMenuItem ztl = new JMenuItem();
        ztl.setText("状态栏");

        // 菜单项添加(文件菜单)
        wj.add(open);
        wj.add(New);
        wj.add(save);
        wj.add(saveas);
        wj.addSeparator();
        wj.add(exit);

        // 菜单项添加(编辑菜单)
        bj.add(cut);
        bj.add(copy);
        bj.add(paste);
        bj.addSeparator();
        bj.add(selectall);

        // 菜单项添加(格式菜单)
        gs.add(auto);
        gs.add(font);

        // 菜单项添加(查看菜单)
        ck.add(ztl);

        // 菜单项添加(帮助菜单)
        bz.add(about);

        // 把各个菜单添加到菜单栏
        gjl.add(wj);
        gjl.add(bj);
        gjl.add(gs);
        gjl.add(ck);
        gjl.add(bz);
        this.setJMenuBar(gjl);
        this.add(ja);

        // 字体
        JLabel lbfont = new JLabel("字体");
        JLabel lbsize = new JLabel("大小");
        JLabel lbshape = new JLabel("字形");
        JPanel jpfont1 = new JPanel();
        JPanel jpfont2 = new JPanel();
        JPanel jpfont3 = new JPanel();
        JPanel jpfont4 = new JPanel();
        final JFrame fontMain = new JFrame();
        final JDialog fontJd = new JDialog(fontMain, "字体,颜色,调色板", true);
        JButton ok = new JButton("确定");
        final JButton canel = new JButton("取消");
        JButton color = new JButton("颜色");
        final List fontList = new List(10, false);
        final List fontShape = new List(10, false);
        final List sizeList = new List(10, false);

        // 加系统字体
        String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment()
                .getAvailableFontFamilyNames();
        for (int i = 0; i < fontNames.length; i++) {
            fontList.add(fontNames[i]);
        }

        // 字体形状
        fontShape.add("常规");
        fontShape.add("粗体");
        fontShape.add("斜体");
        fontShape.add("粗斜体");

        // 设置字体对话框
        fontJd.setSize(450, 300);
        jpfont1.add(lbfont);
        jpfont1.add(fontList);
        jpfont2.add(lbsize);
        jpfont2.add(lbshape);
        jpfont3.add(lbshape);
        jpfont3.add(fontShape);
        jpfont4.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 10));
        jpfont4.add(ok);
        jpfont4.add(canel);
        jpfont4.add(color);

        fontJd.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
        fontJd.add(jpfont1);
        fontJd.add(jpfont2);
        fontJd.add(jpfont3);
        fontJd.add(jpfont4);

        fontList.select(a);
        sizeList.select(4);
        fontShape.select(0);

      

        // 取消按钮监听器
        canel.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                fontMain.setVisible(false);
            }

        });
        // 字体大小
        final String[] size = { "1", "2", "3", "4", "5", "6", "7", "8", "9",
                "10" };
        for (int i = 0; i < size.length; i++) {
            sizeList.add(size[i]);
        }

        // 设置颜色按钮监听器
        color.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                JColorChooser jcolor = new JColorChooser();
                Color fcolor = ja.getForeground();
                ja.setForeground(jcolor.showDialog(ja, "选择字体颜色", fcolor));
            }

        });
        // 确定按钮监听器
        ok.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                fontMain.setVisible(false);
            }

        });

        // 字体监听器
        font.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                fontJd.setLocationRelativeTo(notepad.this);
                fontJd.setVisible(true);

                int style = 0;
                if (fontShape.getSelectedItem().equals("常规") == true) {
                    style = Font.PLAIN;
                }
                if (fontShape.getSelectedItem().equals("斜体") == true) {
                    style = Font.ITALIC;
                }
                if (fontShape.getSelectedItem().equals("粗体") == true) {
                    style = Font.BOLD;
                }
                if (fontShape.getSelectedItem().equals("粗斜体") == true) {
                    style = Font.BOLD + Font.ITALIC;
                }

                // 设置字体大小
                String[] size = { "1", "2", "3", "4", "5", "6", "7", "8", "9",
                        "10" };
                for (int i = 0; i < size.length; i++) {
                    if (sizeList.getSelectedItem().equals(size[i]) == true) {
                        ja.setFont(new Font(String.valueOf(fontList
                                .getSelectedItem()), style, (10 - i) * 10));
                        fontJd.dispose();
                    }
                }

            }
        });

        // 文件改变事件
        ja.getDocument().addDocumentListener(new DocumentListener() {

            public void changedUpdate(DocumentEvent e) {
                flag = true;
            }

            public void insertUpdate(DocumentEvent e) {
                flag = true;
            }

            public void removeUpdate(DocumentEvent e) {
                flag = true;
            }

        });

        // 窗口监听器
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent w) {
                fileName = notepad.this.getTitle();
                if (flag == true) {
                    int returnValue = JOptionPane.showConfirmDialog(null,
                    		notepad.this.getTitle() + "文件还没有保存!需要保存?", "记事本",
                            JOptionPane.YES_NO_CANCEL_OPTION);
                    if (returnValue == JOptionPane.YES_OPTION) {
                        save_asMethod();

                    } else if (returnValue == JOptionPane.NO_OPTION) {
                        System.exit(0);

                    } else
                        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

                }
            }

            // 退出时用到的保存文件函数
            public void save_asMethod() {
                FileDialog fd = new FileDialog(notepad.this, "另存为…",
                        FileDialog.SAVE);
                fd.setFile("*.txt");
                fd.setVisible(true);

                filePath = fd.getDirectory();
                fileName = fd.getFile();

                try {
                    FileWriter fw = new FileWriter(filePath + fileName);
                    BufferedWriter bw = new BufferedWriter(fw);
                    PrintWriter pw = new PrintWriter(bw);

                    pw.println(ja.getText());
                    pw.flush();
                    pw.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });

        // 右键快捷方式
        final JPopupMenu jp = new JPopupMenu();
        final JMenuItem jcopy = new JMenuItem("复制");
        final JMenuItem jpaste = new JMenuItem("粘贴");
        final JMenuItem jcut = new JMenuItem("剪切");
        final JMenuItem jselectall = new JMenuItem("全选");
        final JMenuItem jfont = new JMenuItem("字体");

        jp.add(jcopy);
        jp.add(jpaste);
        jp.add(jcut);
        jp.addSeparator();
        jp.add(jselectall);
        jp.addSeparator();
        jp.add(jfont);

        // 右键菜单之字体的事件

        // 右键菜单之复制的事件
        jcopy.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                ja.copy();
            }

        });

        // 右键菜单之粘贴的事件
        jpaste.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                ja.paste();
            }

        });

        // 右键菜单之剪切的事件
        jcut.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                ja.cut();
            }

        });

        // 右键菜单之全选的事件
        jselectall.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                ja.selectAll();
            }

        });

        // 右键菜单之增加鼠标事件
        ja.addMouseListener(new MouseAdapter() {

            public void mouseReleased(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    jp.show((Component) (e.getSource()), e.getX(), e.getY());

                    String temp = ja.getSelectedText();
                    if (temp != null) {
                        copy.setEnabled(true);
                        cut.setEnabled(true);
                        jcopy.setEnabled(true);
                        jcut.setEnabled(true);
                    } else if (temp == null) {
                        copy.setEnabled(false);
                        cut.setEnabled(false);
                        jcopy.setEnabled(false);
                        jcut.setEnabled(false);
                    }
                    String temp1 = ja.getText();
                    if (temp1 == null) {
                        selectall.setEnabled(false);
                        jselectall.setEnabled(false);
                    } else if (temp1 != null) {
                        selectall.setEnabled(true);
                        jselectall.setEnabled(true);
                    }
                }
            }
        });

        // 复制菜单项
        copy.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                ja.copy();
            }

        });

        // 粘贴菜单项
        paste.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                try {
                    ja.paste();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }

        });

        // 剪切菜单项
        cut.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    ja.cut();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }

        });

        // 全选菜单项
        selectall.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                ja.selectAll();
            }

        });

        // 换行菜单项
        auto.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (a == 0) {
                    ja.setLineWrap(true);
                    a = 1;
                } else if (a == 1) {
                    ja.setLineWrap(false);
                    a = 0;
                }
            }

        });

        // 新建菜单项
        New.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                notepad.this.setTitle("无标题——记事本.txt");
                ja.setText(" ");
            }

        });

        // 退出菜单项
        exit.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                fileName = notepad.this.getTitle();
                if (flag == true) {
                    int returnValue = JOptionPane.showConfirmDialog(null,
                    		notepad.this.getTitle() + "文件还没有保存!需要保存?", "记事本",
                            JOptionPane.YES_NO_CANCEL_OPTION);
                    if (returnValue == JOptionPane.YES_OPTION) {
                        save_asMethod();

                    } else if (returnValue == JOptionPane.NO_OPTION) {
                        System.exit(0);

                    } else
                        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

                }
            }

            public void save_asMethod() {
                FileDialog fd = new FileDialog(notepad.this, "另存为…",
                        FileDialog.SAVE);
                fd.setFile("*.txt");
                fd.setVisible(true);

                filePath = fd.getDirectory();
                fileName = fd.getFile();

                try {
                    FileWriter fw = new FileWriter(filePath + fileName);
                    BufferedWriter bw = new BufferedWriter(fw);
                    PrintWriter pw = new PrintWriter(bw);

                    pw.println(ja.getText());
                    pw.flush();
                    pw.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }

        });

        // 保存菜单项
        save.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                fileName = notepad.this.getTitle();
                try {
                    FileWriter fw = new FileWriter(fileName + ".txt");
                    String save = ja.getText();
                    fw.write(save);
                    fw.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                JOptionPane.showMessageDialog(null, "文件已经成功保存了!", "文件保存",
                        JOptionPane.INFORMATION_MESSAGE);
            }

        });

        // 另存菜单项
        saveas.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {
                FileDialog fd = new FileDialog(notepad.this, "另存为…",
                        FileDialog.SAVE);
                fd.setFile("*.txt");
                fd.setVisible(true);

                filePath = fd.getDirectory();
                fileName = fd.getFile();

                try {
                    FileWriter fw = new FileWriter(filePath + fileName);
                    BufferedWriter bw = new BufferedWriter(fw);
                    PrintWriter pw = new PrintWriter(bw);

                    pw.println(ja.getText());
                    pw.flush();
                    pw.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }

        });

        // 打开菜单项
        open.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                FileDialog fd1 = new FileDialog(notepad.this, "打开",
                        FileDialog.LOAD);
                fd1.setFile("*.txt");
                fd1.setVisible(true);

                fileName = fd1.getFile();
                filePath = fd1.getDirectory();
                notepad.this.setTitle(fileName);
                try {
                    FileReader fr = new FileReader(filePath + fileName);
                    BufferedReader br = new BufferedReader(fr);
                    String sinput = "";
                    ja.setText("");
                    int lineNum = 0;
                    while ((sinput = br.readLine()) != null) {
                        // System.out.println(sinput);
                        ja.append(sinput + "\r\n");
                        lineNum++;
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }

        });

        // 关于菜单项
        final JFrame jfm = new JFrame();
        JLabel lb1 = new JLabel("本记事本有zyw制作\n");
        JLabel lb2 = new JLabel("版权所有,盗版必究!\n");
        JLabel lb3 = new JLabel("谢谢使用!\n");

        jfm.setSize(200, 170);
        jfm.setTitle("关于本软件");
        jfm.add(lb1);
        jfm.add(lb2);
        jfm.add(lb3);
        final JButton qd = new JButton("确定");
        qd.setSize(20, 17);
        jfm.add(qd);

        // 关于菜单项
        about.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                jfm.setLocationRelativeTo(notepad.this);
                jfm.setVisible(true);
                jfm.setLayout(new GridLayout(4, 1, 5, 10));
                jfm.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 10));

                qd.addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent e) {
                        jfm.setVisible(false);
                    }

                });
            }

        });

        // 状态栏菜单项
        final JLabel lb = new JLabel();
        ztl.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (a == 1) {
                    lb.setVisible(false);
                    a = 0;
                } else if (a == 0) {
                	notepad.this.add(lb, BorderLayout.SOUTH);
                    lb.setVisible(true);
                    lb.setText("当前字数: "
                            + String.valueOf(ja.getText().trim().length())
                            + " " + "当前行数: "
                            + String.valueOf(ja.getLineCount()));
                    a = 1;
                }
            }

        });

        // 快捷键
        open.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
        New.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_MASK));
        save.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK));
        exit.setAccelerator(KeyStroke.getKeyStroke('Q', InputEvent.CTRL_MASK));

        copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK));
        paste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK));
        cut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK));
        selectall.setAccelerator(KeyStroke.getKeyStroke('A',
                InputEvent.CTRL_MASK));

        auto.setAccelerator(KeyStroke.getKeyStroke('H', InputEvent.CTRL_MASK));
        font.setAccelerator(KeyStroke.getKeyStroke('F', InputEvent.ALT_MASK));

        // 添加滚动条
        JScrollPane jsp = new JScrollPane(ja);
        Container c = this.getContentPane();
        c.add(jsp);
        jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); // 需要的时候出现
        jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); // 总是存在

        this.setVisible(true);
    }

    private static String change(String s) {
        byte abyte0[] = s.getBytes();
        char ac[] = new char[s.length()];
        int i = 0;
        for (int k = abyte0.length; i < k; i++) {
            int j = abyte0[i];
            if (j >= 48 && j <= 57)
                j = ((j - 48) + 5) % 10 + 48;
            else if (j >= 65 && j <= 90)
                j = ((j - 65) + 13) % 26 + 65;
            else if (j >= 97 && j <= 122)
                j = ((j - 97) + 13) % 26 + 97;
            ac[i] = (char) j;
        }

        return String.valueOf(ac);
    }

    public static void main(String[] args) {

    	notepad jsb = new notepad();
    }

}


分享到:
更多

网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。