⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 notepad.java.bak

📁 JAVA实现记事本
💻 BAK
📖 第 1 页 / 共 2 页
字号:
/*import java.awt.*;
import javax.swing.*;
import java.util.*;
import javax.swing.text.*;
import java.awt.event.*;
import javax.swing.undo.*;*/
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.InputEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.text.DateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.event.CaretEvent;
import javax.swing.event.DocumentEvent;
import javax.swing.text.DefaultEditorKit;
import java.util.HashMap;
import javax.swing.AbstractAction;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JDialog;
import javax.swing.undo.UndoManager;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.event.CaretListener;
import javax.swing.event.DocumentListener;

public class Notepad extends JFrame implements ActionListener, CaretListener, DocumentListener
{
    private JMenuBar menubar = new JMenuBar();
    private JToolBar toolbar = new JToolBar();
    private JLabel statebar = new JLabel(" ");
    private JScrollPane scrollPane = new JScrollPane();
    private JTextArea textArea = new JTextArea();
    private UndoManager undo = new UndoManager();
    private HashMap<Object, Action> editActions = new HashMap<Object, Action>();
    private FileDialog chooser = new FileDialog(this);
    private File file;
    private boolean isModified = false;
    private JDialog aboutDialog = new AboutDialog(this);
    private JPopupMenu pop;
    private JMenu fileMenu;
    private JMenu editMenu;
    private JMenu formatMenu;
    private JMenu viewMenu;
    private JMenu helpMenu;
    private JMenuItem popundo;
    private JMenuItem popredo;
    private JMenuItem popcut;
    private JMenuItem popcopy;
    private JMenuItem poppaste;
    private JMenuItem popdel;
    private JMenuItem popselectAll;
    private JMenuItem newItem;
    private JMenuItem openItem;
    private JMenuItem saveItem;
    private JMenuItem saveAsItem;
    private JMenuItem exitItem;
    private JMenuItem undoItem;
    private JMenuItem redoItem;
    private JMenuItem cutItem;
    private JMenuItem copyItem;
    private JMenuItem pastItem;
    private JMenuItem delItem;
    private JMenuItem searchItem;
    private JMenuItem findNextItem;
    private JMenuItem replaceItem;
    private JMenuItem gotoItem;
    private JMenuItem selectAllItem;
    private JMenuItem dateItem;
    private JMenuItem fontItem;
    private JCheckBoxMenuItem wordWrapItem;
    private JCheckBoxMenuItem statebarItem;    
    private JCheckBoxMenuItem toolbarItem;    
    private JMenuItem helpItem;    
    private JMenuItem aboutItem;    
    private JButton aboutButton;    
    private JButton copyButton;    
    private JButton cutButton;    
    private JButton delButton;    
    private JButton findNextButton;    
    private JButton fontButton;    
    private JButton helpButton;    
    private JButton newButton;    
    private JButton openButton;    
    private JButton pastButton;    
    private JButton redoButton;    
    private JButton replaceButton;    
    private JButton saveButton;    
    private JButton searchButton;    
    private JButton undoButton;    
    
    public Notepad()
    {
        this("");
    }
    
    public Notepad(String title)
    {
        super(title);
        initEditActions();
        initComponents();
    }
    
    private void initComponents()
    {
        pop = new JPopupMenu();
        popundo = new MyMenuItem("撤消(U)", 'U', getKeys(KeyEvent.VK_Z, InputEvent.CTRL_MASK), editActions.get("undo"));
        popredo = new MyMenuItem("重做(R)", 'R', getKeys(KeyEvent.VK_Y, InputEvent.CTRL_MASK), editActions.get("redo"));
        popcut = new MyMenuItem("剪切(X)", 'X', getKeys(KeyEvent.VK_X, InputEvent.CTRL_MASK), editActions.get(DefaultEditorKit.cutAction));        
        popcopy = new MyMenuItem("复制(C)", 'C', getKeys(KeyEvent.VK_C, InputEvent.CTRL_MASK), editActions.get(DefaultEditorKit.copyAction));
        poppaste = new MyMenuItem("粘贴(P)", 'P', getKeys(KeyEvent.VK_V, InputEvent.CTRL_MASK), editActions.get(DefaultEditorKit.pasteAction));
        popdel = new MyMenuItem("删除(L)", 'L', getKeys(KeyEvent.VK_DELETE, 0));
        popselectAll = new MyMenuItem("全选(A)", 'A', getKeys(KeyEvent.VK_A, InputEvent.CTRL_MASK), editActions.get(DefaultEditorKit.selectAllAction));
        pop.add(popundo);
        pop.add(popredo);
        pop.addSeparator();
        pop.add(popcut);
        pop.add(popcopy);
        pop.add(poppaste);
        pop.add(popdel);
        pop.addSeparator();
        pop.add(popselectAll);
        
        
        fileMenu = new JMenu("文件(F)");
        editMenu = new JMenu("编辑(E)");
        formatMenu = new JMenu("格式");
        viewMenu = new JMenu("查看(V)");
        helpMenu = new JMenu("帮助(H)");

        newItem = new MyMenuItem("新建(N)", 'N', getKeys(KeyEvent.VK_N, InputEvent.CTRL_MASK));
        openItem = new MyMenuItem("打开(O)...", 'O', getKeys(KeyEvent.VK_O, InputEvent.CTRL_MASK));
        saveItem = new MyMenuItem("保存(S)", 'S', getKeys(KeyEvent.VK_S, InputEvent.CTRL_MASK));
        saveAsItem = new MyMenuItem("另存为(A)...", 'A');
        exitItem = new MyMenuItem("退出(X)", 'X');
        undoItem = new MyMenuItem("撤消(U)", 'U', getKeys(KeyEvent.VK_Z, InputEvent.CTRL_MASK), editActions.get("undo"));
        redoItem = new MyMenuItem("重做(R)", 'R', getKeys(KeyEvent.VK_Y, InputEvent.CTRL_MASK), editActions.get("redo"));
        cutItem = new MyMenuItem("剪切(X)", 'X', getKeys(KeyEvent.VK_X, InputEvent.CTRL_MASK), editActions.get(DefaultEditorKit.cutAction));        
        copyItem = new MyMenuItem("复制(C)", 'C', getKeys(KeyEvent.VK_C, InputEvent.CTRL_MASK), editActions.get(DefaultEditorKit.copyAction));
        pastItem = new MyMenuItem("粘贴(P)", 'P', getKeys(KeyEvent.VK_V, InputEvent.CTRL_MASK), editActions.get(DefaultEditorKit.pasteAction));
        delItem = new MyMenuItem("删除(L)", 'L', getKeys(KeyEvent.VK_DELETE, 0));
        searchItem = new MyMenuItem("查找(F)", 'F', getKeys(KeyEvent.VK_F, InputEvent.CTRL_MASK));
        findNextItem = new MyMenuItem("查找下一个(N)", 'N', getKeys(KeyEvent.VK_F3, 0));
        replaceItem = new MyMenuItem("替换(E)", 'E', getKeys(KeyEvent.VK_H, InputEvent.CTRL_MASK));
        gotoItem = new MyMenuItem("转到(G)", 'G', getKeys(KeyEvent.VK_G, InputEvent.CTRL_MASK));
        selectAllItem = new MyMenuItem("全选(A)", 'A', getKeys(KeyEvent.VK_A, InputEvent.CTRL_MASK), editActions.get(DefaultEditorKit.selectAllAction));
        dateItem = new MyMenuItem("日期/时间(D)", 'D', getKeys(KeyEvent.VK_F5, 0));
        fontItem = new MyMenuItem("字体(F)...", 'F');
        wordWrapItem = new JCheckBoxMenuItem("自动换行(W)", false);
        statebarItem = new JCheckBoxMenuItem("状态栏(S)", true);        
        toolbarItem = new JCheckBoxMenuItem("工具栏(T)", true);
        helpItem = new MyMenuItem("帮助(H)", 'H');
        aboutItem = new MyMenuItem("关于(A)", 'A');

        aboutButton = new MyButton(new ImageIcon("about.png"), "关于");
        copyButton = new MyButton(new ImageIcon("copy.png"), "复制  Ctrl+C", editActions.get(DefaultEditorKit.copyAction));
        cutButton = new MyButton(new ImageIcon("cut.png"), "剪切  Ctrl+X", editActions.get(DefaultEditorKit.cutAction));
        delButton = new MyButton(new ImageIcon("del.png"), "删除  Delete");
        findNextButton = new MyButton(new ImageIcon("findnext.png"), "查找下一个  F3");
        fontButton = new MyButton(new ImageIcon("font.png"), "字体");
        helpButton = new MyButton(new ImageIcon("help.png"), "帮助");
        newButton = new MyButton(new ImageIcon("new.png"), "新建  Ctrl+N");
        openButton = new MyButton(new ImageIcon("open.png"), "打开  Ctrl+O");
        pastButton = new MyButton(new ImageIcon("past.png"), "粘贴  Ctrl+V", editActions.get(DefaultEditorKit.pasteAction));
        redoButton = new MyButton(new ImageIcon("redo.png"), "重做  Ctrl+Y", editActions.get("redo"));
        replaceButton = new MyButton(new ImageIcon("replace.png"), "替换  Ctrl+H");
        saveButton = new MyButton(new ImageIcon("save.png"), "保存  Ctrl+S");
        searchButton = new MyButton(new ImageIcon("search.png"), "查找   Ctrl+F");
        undoButton = new MyButton(new ImageIcon("undo.png"), "撤消  Ctrl+Z", editActions.get("undo"));

		wordWrapItem.addActionListener(this);
        statebarItem.addActionListener(this);
        toolbarItem.addActionListener(this);

		fileMenu.add(newItem);
        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.add(saveAsItem);
        fileMenu.add(new JSeparator());
        fileMenu.add(exitItem);
        fileMenu.setMnemonic('F');
        
        editMenu.add(undoItem);
        editMenu.add(redoItem);
        editMenu.add(new JSeparator());
        editMenu.add(cutItem);
        editMenu.add(copyItem);
        editMenu.add(pastItem);
        editMenu.add(delItem);
        editMenu.add(new JSeparator());
        editMenu.add(searchItem);
        editMenu.add(findNextItem);
        editMenu.add(replaceItem);
        editMenu.add(gotoItem);
        editMenu.add(new JSeparator());
        editMenu.add(selectAllItem);
        editMenu.add(dateItem);
        editMenu.setMnemonic('E');
        formatMenu.add(wordWrapItem);
        formatMenu.add(fontItem);
        formatMenu.setMnemonic('O');
        viewMenu.add(toolbarItem);
        
        viewMenu.add(statebarItem);
        viewMenu.setMnemonic('V');
        
        helpMenu.add(helpItem);
        helpMenu.add(new JSeparator());
        helpMenu.add(aboutItem);
        
        menubar.add(fileMenu);
        menubar.add(editMenu);
        menubar.add(formatMenu);
        menubar.add(viewMenu);
        menubar.add(helpMenu);
        
        toolbar.setRollover(true);
        toolbar.add(newButton);
        toolbar.add(openButton);
        toolbar.add(saveButton);
        toolbar.addSeparator();
        toolbar.add(undoButton);
        toolbar.add(redoButton);
        toolbar.addSeparator();
        toolbar.add(cutButton);
        toolbar.add(copyButton);
        toolbar.add(pastButton);
        toolbar.add(delButton);
        toolbar.addSeparator();
        toolbar.add(searchButton);
        toolbar.add(findNextButton);
        toolbar.add(replaceButton);
        toolbar.add(fontButton);
        toolbar.addSeparator();
        toolbar.add(helpButton);
        toolbar.add(aboutButton);
        
        textArea.getDocument().addUndoableEditListener(undo);
        textArea.getDocument().addDocumentListener(this);
        textArea.addCaretListener(this);
        textArea.setWrapStyleWord(true);
        textArea.setComponentPopupMenu(pop);
        scrollPane.setViewportView(textArea);
        scrollPane.setPreferredSize(new Dimension(1024, 1024));

        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setJMenuBar(menubar);
        this.getContentPane().add(toolbar, BorderLayout.NORTH);
        this.getContentPane().add(scrollPane, BorderLayout.CENTER);
        this.getContentPane().add(statebar, BorderLayout.SOUTH);
        this.addWindowListener(new WindowAdapter() 
        {
            public void windowClosing(WindowEvent e)
            {
                exit();
            }
        });
        this.pack();
        this.setLocationByPlatform(true);
        aboutDialog.setLocationRelativeTo(this);
    }

    private void initEditActions()
    {
        Action[] actions = new DefaultEditorKit().getActions();
        for (Action action : actions)
        {
            editActions.put(action.getValue(Action.NAME), action);
        }
        editActions.put("undo", new UndoAction());
        editActions.put("redo", new RedoAction());
    }
    
    public void showHelp()
    {
        JOptionPane.showMessageDialog(this, "\u8fd9\u4e48\u7b80\u5355\u7684\u4e1c\u897f\u90fd\u8981\u5e2e\u52a9\uff1f\u4f60\u706b\u661f\u6765\u7684\u5416\uff1f\uff01", "帮助", JOptionPane.YES_OPTION);
    }
    
    public void showAbout()
    {
    }
    public boolean newFile()
    {
        if (isModified)
        {
            int ans = JOptionPane.showConfirmDialog(this, "文件已被修改,是否要保存该文件?", "保存文件", JOptionPane.YES_NO_CANCEL_OPTION);
            if (ans == JOptionPane.OK_OPTION)
                save();
            else if (ans == JOptionPane.CANCEL_OPTION)
                return false;
        }
        textArea.setText("");
        isModified = false;
        editActions.get("undo").setEnabled(false);
        file = null;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -