📄 notepad.java.bak
字号:
/*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 + -