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

📄 notepad.java

📁 java实现的超强记事本
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
package code;

import java.io.*;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import java.awt.*;
import java.awt.event.*;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.*;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileFilter;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import javax.swing.undo.UndoManager;

/**
 * 这是一款拓展Windows XP系统自带记事本的程序,该程序除了支持Windows XP记事本的功能外,还提供了多种功能,令记事本不再单调!<br>
 * 特色:<br>
 * (1)支持windows xp自带记事本的所有功能!<br>
 * (2)增强的文本字体功能,可以设置字体颜色以及字体背景颜色等等,并且提供预览,多姿多彩,让你的记事本不再单调!!!<br>
 * (3)可以改变文本编辑框的背景颜色,愉悦心情!<br>
 * (4)改善xp记事本,支持重做(Redo)功能,更加方便快捷! <br>
 * (5)增加工具栏,更加方便快捷!<br>
 * (6)增强的替换功能,可选替换方向,适应与所有替换情况!<br>
 * (7)状态栏显示功能,带给你最方便快捷的使用提示和实时字数统计,更加容易操作和习惯!<br>
 * (8)完善的字数统计功能,让你犹如在WORD上操作!<br>
 * (9)完美兼容Windows XP记事本所有快捷键,完全不存在适应问题!<br>
 * (10)再也不用担心个人做的记事本无法打印,页面设置和打印没问题!<br>
 * (11)使用windows xp友好界面风格,摒弃JAVA程序的界面,更加习惯!<br>
 * (12)程序更加精悍!
 * <p>
 * 任何问题,联系作者:许子彦 QQ:125177027 E-mail:micaroo@vip.qq.com
 * <p>
 * 
 * @author 许子彦<br>
 *         厦门大学软件学院软件工程系06级<br>
 *         学号:24320062204504
 * 
 * @version 2.01
 * 
 */
public class notepad extends JFrame implements ActionListener, ItemListener,
		WindowListener, MouseListener {
	Container c = this.getContentPane();
	File file = null;// 当前文件
	JFileChooser filechooser = new JFileChooser();
	String oldValue; // 存放编辑区原来的内容,用于比较文本是否有改动
	JMenuBar bar = new JMenuBar();
	// 颜色拾取器,设置背景颜色时调用
	JColorChooser colorchooser = new JColorChooser();
	// 初始化的字体颜色和字体背景颜色,并且存储更改后的颜色设置
	Color forecolor = Color.BLACK, backcolor = Color.WHITE;
	// 菜单栏
	JMenu fileMenu = new JMenu("文件(F)");
	JMenu editMenu = new JMenu("编辑(E)");
	JMenu formatMenu = new JMenu("格式(O)");
	JMenu viewMenu = new JMenu("查看(V)");
	JMenu helpMenu = new JMenu("帮助(H)");
	// 菜单选项
	JMenuItem newItem = new JMenuItem("新建(N)");
	JMenuItem openItem = new JMenuItem("打开(O)...");
	JMenuItem saveItem = new JMenuItem("保存(S)");
	JMenuItem saveasItem = new JMenuItem("另存为...");
	JMenuItem uniformItem = new JMenuItem("页面设置(U)...");
	JMenuItem printItem = new JMenuItem("打印(P)...");
	JMenuItem exitItem = new JMenuItem("退出(X)");
	JMenuItem undoItem = new JMenuItem("撤消(U)");
	JMenuItem redoItem = new JMenuItem("重做(R)");
	JMenuItem cutItem = new JMenuItem("剪切(T)");
	JMenuItem copyItem = new JMenuItem("复制(C)");
	JMenuItem pasteItem = new JMenuItem("粘贴(P)");
	JMenuItem deleteItem = new JMenuItem("删除(L)");
	JMenuItem searchItem = new JMenuItem("查找(F)...");
	JMenuItem searchnextItem = new JMenuItem("查找下一个(N)...");
	JMenuItem replaceItem = new JMenuItem("替换(R)...");
	JMenuItem gotoItem = new JMenuItem("转到(G)");
	JMenuItem seleteAllItem = new JMenuItem("全选(A)");
	JMenuItem dateItem = new JMenuItem("时间/日期(D)");
	JMenuItem fontItem = new JMenuItem("字体(E)...");
	JMenuItem colorItem = new JMenuItem("颜色(H)...");
	JMenuItem countItem = new JMenuItem("字数统计");
	JMenuItem aboutItem = new JMenuItem("关于(A)");
	// 右键菜单选项
	JMenuItem undopopupItem = new JMenuItem("撤消CTRL+Z");
	JMenuItem redopopupItem = new JMenuItem("重做CTRL+R");
	JMenuItem cutpopupItem = new JMenuItem("剪切CTRL+X");
	JMenuItem copypopupItem = new JMenuItem("复制CTRL+C");
	JMenuItem pastepopupItem = new JMenuItem("粘贴CTRL+V");
	JMenuItem deletepopupItem = new JMenuItem("删除Delete");
	JMenuItem seleteAllpopupItem = new JMenuItem("全选CTRL+A");
	JMenuItem fontpopupItem = new JMenuItem("字体...CTRL+F");
	JMenuItem colorpopupItem = new JMenuItem("颜色...CTRL+I");
	// 自动换行使用CheckBox
	JCheckBoxMenuItem lineItem = new JCheckBoxMenuItem("自动换行(W)");
	JCheckBoxMenuItem statueItem = new JCheckBoxMenuItem("状态栏");
	// 工具栏图标
	Icon newicon, openicon, saveicon, undoicon, redoicon, copyicon, pasteicon,
			cuticon, deleteicon, fonticon, coloricon, helpicon;
	// 工具栏的图标button
	JButton newButton, openButton, saveButton, undoButton, redoButton,
			copyButton, pasteButton, cutButton, deleteButton, fontButton,
			colorButton, helpButton, fontcolorchooser, fontbackcolorchooser;
	// 显示字体效果预览用的JLabel
	JLabel fontPreviewLabel = new JLabel("预览");
	// 记事本框
	JTextPane text = new JTextPane();
	// 撤销管理器,使用在撤销和重做功能
	UndoManager undo;
	// 记事本框滚动条
	JScrollPane scroller = new JScrollPane(text);
	// 字体设置所使用的ComboBox,分别是字体名称、字号大小、文字样式、文字颜色、文字背景颜色
	private JList fontName = null, fontSize = null, fontStyle = null;
	// 改变文字样式所使用的文本形式
	private StyledDocument doc = null;
	// 继承ActionListener的内部类对象
	ActionHandler handler = new ActionHandler();
	// 用于标志是否是新的文件
	boolean newfileFlag = true;
	// 调用打印机所需
	PrinterJob prtMe = PrinterJob.getPrinterJob();
	// 有右键,才方便
	JPopupMenu popupMenu;
	// 状态栏
	JLabel statuelabel = new JLabel("状态栏");
	public notepad() {
		super("新建 文本文档");
		//设置显示位置
		Toolkit kt=this.getToolkit();
		this.setLocation(kt.getScreenSize().width/2-180, kt.getScreenSize().height/2-180);
		// 以假乱真呵呵,把JFrame左边的JAVA图标改成记事本的图标,这下更像是记事本了
		setIconImage(Toolkit.getDefaultToolkit().createImage("image/标题.gif"));
		// 获得JTextPane的Document
		Font defaultFont = new Font("宋体", Font.PLAIN, 14);// 默认字体
		text.setFont(defaultFont);
		doc = text.getStyledDocument();
		// 窗口事件监听器,点击关闭时使用
		this.addWindowListener(this);
		// 设置布局
		c.setLayout(new BorderLayout());
		// 设置菜单
		setJMenuBar(bar);
		// 撤销重做管理器,添加监听器
		undo = new UndoManager();
		text.getDocument().addUndoableEditListener(undo);
		// 添加组件
		bar.add(fileMenu);
		fileMenu.setMnemonic('f');
		fileMenu.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("文件菜单(ALT+F)");
			}
		});
		bar.add(editMenu);
		editMenu.setMnemonic('e');
		editMenu.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("编辑菜单(ALT+E)");
			}
		});
		bar.add(formatMenu);
		formatMenu.setMnemonic('o');
		formatMenu.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("格式菜单(ALT+O)");
			}
		});
		bar.add(viewMenu);
		viewMenu.setMnemonic('v');
		viewMenu.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("查看菜单(ALT+V)");
			}
		});
		bar.add(helpMenu);
		helpMenu.setMnemonic('h');
		helpMenu.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("帮助菜单(ALT+H)");
			}
		});
		// 文件菜单组件
		fileMenu.add(newItem);
		newItem.setMnemonic('n');
		newItem.setAccelerator(KeyStroke.getKeyStroke('N', Event.CTRL_MASK,
				false));
		newItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("新建(CTRL+N)");
			}
		});
		newItem.addActionListener(this);
		fileMenu.add(openItem);
		openItem.setMnemonic('o');
		openItem.setAccelerator(KeyStroke.getKeyStroke('O', Event.CTRL_MASK,
				false));
		openItem.addActionListener(this);
		openItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("打开(CTRL+O)");
			}
		});
		fileMenu.add(saveItem);
		saveItem.setMnemonic('s');
		saveItem.setAccelerator(KeyStroke.getKeyStroke('S', Event.CTRL_MASK,
				false));
		saveItem.addActionListener(this);
		saveItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("保存(CTRL+S)");
			}
		});
		fileMenu.add(saveasItem);
		saveasItem.setMnemonic('A');
		saveasItem.addActionListener(this);
		saveasItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("另存为");
			}
		});
		fileMenu.addSeparator();
		fileMenu.add(uniformItem);
		uniformItem.setMnemonic('U');
		uniformItem.addActionListener(this);
		uniformItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("页面设置");
			}
		});
		fileMenu.add(printItem);
		printItem.setMnemonic('P');
		printItem.setAccelerator(KeyStroke.getKeyStroke('P', Event.CTRL_MASK,
				false));
		printItem.addActionListener(this);
		printItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("打印(CTRL+P)");
			}
		});
		fileMenu.addSeparator();
		fileMenu.add(exitItem);
		exitItem.setMnemonic('X');
		exitItem.addActionListener(this);
		exitItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("退出");
			}
		});
		// 编辑菜单组件
		editMenu.add(undoItem);
		undoItem.setMnemonic('U');
		undoItem.setAccelerator(KeyStroke.getKeyStroke('Z', Event.CTRL_MASK,
				false));
		undoItem.addActionListener(this);
		undoItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("撤销(CTRL+Z)");
			}
		});
		editMenu.add(redoItem);
		redoItem.setMnemonic('R');
		redoItem.setAccelerator(KeyStroke.getKeyStroke('R', Event.CTRL_MASK,
				false));
		redoItem.addActionListener(this);
		redoItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("重做(CTRL+R)");
			}
		});
		editMenu.addSeparator();
		editMenu.add(cutItem);
		cutItem.setMnemonic('T');
		cutItem.setAccelerator(KeyStroke.getKeyStroke('X', Event.CTRL_MASK,
				false));
		cutItem.addActionListener(this);
		cutItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("剪切(CTRL+X)");
			}
		});
		editMenu.add(copyItem);
		copyItem.setMnemonic('C');
		copyItem.setAccelerator(KeyStroke.getKeyStroke('C', Event.CTRL_MASK,
				false));
		copyItem.addActionListener(this);
		copyItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("复制(CTRL+C)");
			}
		});
		editMenu.add(pasteItem);
		pasteItem.setMnemonic('P');
		pasteItem.setAccelerator(KeyStroke.getKeyStroke('V', Event.CTRL_MASK,
				false));
		pasteItem.addActionListener(this);
		pasteItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("粘贴(CTRL+V)");
			}
		});
		editMenu.add(deleteItem);
		deleteItem.setMnemonic('L');
		deleteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0,
				false));
		deleteItem.addActionListener(this);
		deleteItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("删除(Delete)");
			}
		});
		editMenu.addSeparator();
		editMenu.add(searchItem);
		searchItem.setMnemonic('F');
		searchItem.setAccelerator(KeyStroke.getKeyStroke('F', Event.CTRL_MASK,
				false));
		searchItem.addActionListener(this);
		searchItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("查找(CTRL+F)");
			}
		});
		editMenu.add(searchnextItem);
		searchnextItem.setMnemonic('N');
		searchnextItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0,
				false));
		searchnextItem.addActionListener(this);
		searchnextItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("查找下一个(F3)");
			}
		});
		editMenu.add(replaceItem);
		replaceItem.setMnemonic('R');
		replaceItem.setAccelerator(KeyStroke.getKeyStroke('H', Event.CTRL_MASK,
				false));
		replaceItem.addActionListener(this);
		replaceItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("替换(CTRL+H)");
			}
		});
		editMenu.add(gotoItem);
		gotoItem.setMnemonic('G');
		gotoItem.setAccelerator(KeyStroke.getKeyStroke('G', Event.CTRL_MASK,
				false));
		gotoItem.setEnabled(false);
		gotoItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("转向(CTRL+G)");
			}
		});
		editMenu.addSeparator();
		editMenu.add(seleteAllItem);
		seleteAllItem.setMnemonic('A');
		seleteAllItem.setAccelerator(KeyStroke.getKeyStroke('A',
				Event.CTRL_MASK, false));
		seleteAllItem.addActionListener(this);
		seleteAllItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("全选(CTRL+A)");
			}
		});
		editMenu.add(dateItem);
		dateItem.setMnemonic('D');
		dateItem.setAccelerator(KeyStroke
				.getKeyStroke(KeyEvent.VK_F5, 0, false));
		dateItem.addActionListener(this);
		dateItem.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				statuelabel.setText("日期/时间(F5)");
			}
		});
		// 格式菜单组件
		formatMenu.add(fontItem);
		fontItem.setMnemonic('E');

⌨️ 快捷键说明

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