📄 mynotepad.java
字号:
/** * * @author lidawen */import java.awt.*;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.awt.event.*;import java.awt.print.PrinterException;import java.io.*;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Locale;import javax.swing.event.*;import javax.swing.undo.*;import javax.swing.*;import javax.swing.filechooser.FileFilter;//import setfont.SetFont;class DaveNotepad extends JFrame implements ActionListener, DocumentListener, MouseListener, Transferable { /**本程序实现一个记事本编辑器,所有的功能都和XP系统自带的记事本基本一样,多出了工具栏等一些东西 * */ private static final long serialVersionUID = 3056169543548771920L; /*##########################以下为变量的定义###############################*/ File file = null;//当前文件 boolean isNewfile = true;//指示是否为新文件 String oldValue; //存放编辑区原来的内容,用于比较文本是否有改动 JFileChooser filechooser = new JFileChooser(); //文件选择框 JMenuBar mb = new JMenuBar(); //菜单条 JMenu mf, me, mo, mh;//菜单文件、编辑、格式、帮助 JMenuItem mi1, mi2, mi3, mi4, mi5, mi6, mi7; //文件菜单项 JMenuItem me1, me12, me2, me3, me4, me5, me6, me7, me8, me9, me10, me11;//编辑菜单项 JMenuItem mo1, mo2; //格式菜单项 JMenuItem mh1, mh2;//帮助菜单项 JToolBar tbar = new JToolBar();//工具条 JButton bt_save, bt_new, bt_open, bt_cut, bt_copy, bt_paste, bt_undo, bt_redo, bt_bold, bt_underline, bt_italic; //工具条上的按钮 JLabel fontlabel;//工具条上的字体标签 JLabel sizelabel;//工具条上的字号标签 JLabel statusLabel;//状态栏标签 JPopupMenu popupMenu;//右键菜单 JMenuItem popupMenu_Undo, popupMenu_Redo, popupMenu_Cut, popupMenu_Copy, popupMenu_Paste, popupMenu_Delete, popupMenu_SelectAll; UndoManager undo = new UndoManager(); // 撤消管理器 Font defaultFont = new Font("宋体", Font.PLAIN, 15);//默认字体 String fontname; //用于工具栏中文字的字体设置选项,获取用户选择的字体型 int fontsize; //用于工具栏中文字的字号设置选项,获取用户选择的字号大小 JTextArea tex = new JTextArea(); //文本域//创建系统剪贴板 Toolkit toolKit = Toolkit.getDefaultToolkit(); Clipboard clipBoard = toolKit.getSystemClipboard(); public JButton fontOkButton; //字体设置里的"确定"按钮 /*################构造方法##############################*/ public DaveNotepad() { super("Dave's Notepad"); tex.setFont(defaultFont);//设置编辑区默认的字体 //$$$$$$$$$$$$$$以下为菜单的建立$$$$$$$$$$$$$$$$$ mb.setOpaque(false); //设置透明 mb.setBorderPainted(true);//设置边框的可见性 mf = new JMenu("文件(F)", true); //文件菜单 mf.setMnemonic(KeyEvent.VK_F); //设置快捷键按下ALT+F打开本菜单 mi1 = new JMenuItem("新建(N)"); //“新建”菜单项 mi1.setMnemonic('N'); //设置激活键为N mi1.addActionListener(this); //添加监听器 mi1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));//设置快捷键CTRL+N激活本项 mf.add(mi1); //添加到菜单 //以下为上面同样的重复 mi2 = new JMenuItem("打开(O)..."); mi2.addActionListener(this); mi2.setMnemonic('O'); mi2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); mf.add(mi2); mi3 = new JMenuItem("保存(S)"); mi3.addActionListener(this); mi3.setMnemonic('S'); mi3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); mf.add(mi3); mi4 = new JMenuItem("另存为(A)..."); mi4.addActionListener(this); mi4.setMnemonic('A'); mf.add(mi4); mf.addSeparator(); //添加分隔线 mi5 = new JMenuItem("页面设置(U)..."); mi5.addActionListener(this); mi5.setMnemonic('U'); mi5.setEnabled(false);//本功能暂无 mf.add(mi5); mi6 = new JMenuItem("打印(P)..."); mi6.addActionListener(this); mi6.setMnemonic('P'); mi6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK)); mf.add(mi6); mf.addSeparator(); //添加分割线 mi7 = new JMenuItem("退出(X)"); mi7.setMnemonic('X'); mi7.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK)); mi7.addActionListener(this); mf.add(mi7); mb.add(mf); //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$文件菜单建立完毕$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$以下为编辑菜单$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ me = new JMenu("编辑(E)"); //编辑菜单 me.setMnemonic(KeyEvent.VK_E); me1 = new JMenuItem("撤消(Z)"); me1.addActionListener(this); me1.setMnemonic('Z'); me1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK)); me.add(me1); me12 = new JMenuItem("恢复撤销(B)"); me12.addActionListener(this); me12.setMnemonic('B'); me12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_MASK)); me.add(me12); me.addSeparator(); me2 = new JMenuItem("剪切(T)"); me2.addActionListener(this); me2.setMnemonic('T'); me2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); me.add(me2); me3 = new JMenuItem("复制(C)"); me3.addActionListener(this); me3.setMnemonic('C'); me3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); me.add(me3); me4 = new JMenuItem("粘贴(P)"); me4.addActionListener(this); me4.setMnemonic('P'); me4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); me.add(me4); me5 = new JMenuItem("删除(L)"); me5.addActionListener(this); me5.setMnemonic('L'); me5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK)); me.add(me5); me.addSeparator(); me6 = new JMenuItem("查找(F)..."); me6.addActionListener(this); me6.setMnemonic('F'); me6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK)); me.add(me6); me7 = new JMenuItem("查找下一个(N)"); me7.addActionListener(this); me7.setMnemonic('N'); me7.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, InputEvent.CTRL_MASK)); me.add(me7); me8 = new JMenuItem("替换(R)..."); me8.addActionListener(this); me8.setMnemonic('R'); me8.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK)); me.add(me8); me9 = new JMenuItem("转到(G)..."); me9.addActionListener(this); me9.setMnemonic('G'); me9.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK)); me.add(me9); me.addSeparator(); me10 = new JMenuItem("全选(A)"); me10.addActionListener(this); me10.setMnemonic('A'); me10.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); me.add(me10); me11 = new JMenuItem("时间/日期(D)"); me11.addActionListener(this); me11.setMnemonic('D'); me11.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, InputEvent.CTRL_MASK)); me.add(me11); mb.add(me); //$$$$$$$$$$$$$$$$$$$编辑菜单完毕$$$$$$$$$$$$$$$$$$$$$ //$$$$$$$$$$$$$$$$$$$一下为格式菜单$$$$$$$$$$$$$$$$$$$ mo = new JMenu("格式(O)"); //格式菜单 mo.setMnemonic(KeyEvent.VK_O); mo1 = new JMenuItem("自动换行(W)"); mo1.addActionListener(this); mo1.setMnemonic('W'); mo.add(mo1); mo2 = new JMenuItem("字体(F)"); mo2.addActionListener(this); mo2.setMnemonic('F');// mo2.setEnabled(false); mo.add(mo2); mb.add(mo); //$$$$$$$$$$$$$$$格式菜单完毕$$$$$$$$$$$$$$$$$$$$$$ //$$$$$$$$$$$$$$以下为帮助菜单$$$$$$$$$$$$$$$$$$$$$ mh = new JMenu("帮助(H)"); //帮助菜单 mh.setMnemonic(KeyEvent.VK_H); mh1 = new JMenuItem("帮助主题(H)"); mh1.addActionListener(this); mh1.setMnemonic('H'); mh1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, InputEvent.CTRL_MASK)); mh.add(mh1); mh2 = new JMenuItem("关于本记事本(A)"); mh2.addActionListener(this); mh2.setMnemonic('A'); mh.add(mh2); mb.add(mh); //$$$$$$$$$$$$$帮助菜单完毕$$$$$$$$$$$$$$$$$$$$$$$$ //$$$$$$$$$$$$$$$$$$$以下为工具条的建立$$$$$$$$$$$$$ Icon new_icon = new ImageIcon("icons/new.gif"); //设置工具条上按钮的图标 Icon open_icon = new ImageIcon("icons/open.gif"); Icon save_icon = new ImageIcon("icons/save.gif"); Icon cut_icon = new ImageIcon("icons/cut.gif"); Icon copy_icon = new ImageIcon("icons/copy.gif"); Icon paste_icon = new ImageIcon("icons/paste.gif"); Icon undo_icon = new ImageIcon("icons/undo.gif"); Icon redo_icon = new ImageIcon("icons/redo.gif"); Icon bold_icon = new ImageIcon("icons/bold.gif"); Icon ltalic_icon = new ImageIcon("icons/italic.gif"); Icon underline_icon = new ImageIcon("icons/underline.gif"); tbar.setFloatable(true); //设置工具条为可浮动 FlowLayout flayout = new FlowLayout(FlowLayout.LEADING, 0, 0); //布局方式 tbar.setLayout(flayout); flayout.setAlignOnBaseline(true); bt_new = new JButton(new_icon); //新建文件 bt_open = new JButton(open_icon); //打开文件 bt_save = new JButton(save_icon); //保存文件 bt_undo = new JButton(undo_icon); //撤销 bt_redo = new JButton(redo_icon); //重做 bt_cut = new JButton(cut_icon); //剪切 bt_copy = new JButton(copy_icon); //复制 bt_paste = new JButton(paste_icon); //粘贴 bt_bold = new JButton(bold_icon); //粗体 bt_italic = new JButton(ltalic_icon); //斜体 bt_underline = new JButton(underline_icon); //下划线 bt_new.setToolTipText("新建文件");//设置提示文字 bt_new.addActionListener(this); bt_open.setToolTipText("打开文件"); bt_open.addActionListener(this); bt_save.setToolTipText("保存文件"); bt_save.addActionListener(this); bt_undo.setToolTipText("撤销"); bt_undo.addActionListener(this); bt_redo.setToolTipText("恢复撤销"); bt_redo.addActionListener(this); bt_cut.setToolTipText("剪切"); bt_cut.addActionListener(this); bt_copy.setToolTipText("复制"); bt_copy.addActionListener(this); bt_paste.setToolTipText("粘贴"); bt_paste.addActionListener(this); bt_bold.setToolTipText("粗体"); bt_bold.addActionListener(this); bt_italic.setToolTipText("斜体"); bt_italic.addActionListener(this); bt_underline.setToolTipText("下划线"); // bt_underline.addActionListener(this); tbar.add(bt_new); tbar.add(bt_open); tbar.add(bt_save); tbar.addSeparator(); tbar.add(bt_undo); tbar.add(bt_redo); tbar.addSeparator(); tbar.add(bt_cut); tbar.add(bt_copy); tbar.add(bt_paste); tbar.addSeparator(); tbar.add(bt_bold); tbar.add(bt_italic); tbar.add(bt_underline); bt_underline.setEnabled(false); fontlabel = new JLabel("字体"); tbar.addSeparator(); tbar.add(fontlabel); //字体标签 String[] ComboStr1 = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();//获取本地的本地语言的字体 JComboBox typecombo = new JComboBox(ComboStr1); typecombo.setActionCommand("Type"); typecombo.addActionListener(this); typecombo.addItemListener(new ItemListener() {//添加监听器获取选择用户的字体类型 public void itemStateChanged(ItemEvent e) { fontname = (String) e.getItem(); } }); tbar.add(typecombo); //字号标签 JLabel sizelabel = new JLabel("大小"); tbar.addSeparator(); tbar.add(sizelabel); String[] ComboStr2 = {"8", "9", "10", "12", "14", "15", "16", "18", "20", "21", "22", "24", "26", "28", "30", "36", "48", "54", "72", "89" }; JComboBox sizecombo = new JComboBox(ComboStr2); sizecombo.setActionCommand("Size"); sizecombo.addActionListener(this); sizecombo.addItemListener(new ItemListener() {//添加监听器获取选择用户的字号大小 public void itemStateChanged(ItemEvent e) { fontsize = (new Integer((String) e.getItem()).intValue()); } }); tbar.add(sizecombo); //$$$$$$$$$$$$$$工具条完毕$$$$$$$$$$$$$$$$$$$$$$$$ //$$$$$$$$$$$$$$右键菜单$$$$$$$$$$$$$$$$$$$$$$$$$$ popupMenu = new JPopupMenu();//右键菜单 tex.add(popupMenu); tex.addMouseListener(this);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -