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

📄 notepad.java

📁 一个记事本程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package notepad;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import javax.swing.event.*;

import java.text.*;

public class NotePad extends JFrame implements ActionListener{
	// 工作区
	JTextArea note;
	// 菜单工具条
	JMenuBar menuBar = new JMenuBar();
	// 文本框滑块
	JScrollPane jScrollPane;
	// 初始化 文件 菜单
	JMenu file = new JMenu("文件(F)");
	JMenuItem build = new JMenuItem("新建(N)");
	JMenuItem open = new JMenuItem("打开(O)");
	JMenuItem save = new JMenuItem("保存(S)");
	JMenuItem reSave = new JMenuItem("另存为(A)");
	JMenuItem quit = new JMenuItem("退出(X)");
	JMenuItem setPage = new JMenuItem("页面设置(U)");
	JMenuItem print = new JMenuItem("打印(P)");
	// 初始化 编辑 菜单
	JMenu edit = new JMenu("编辑(E)");
	JMenuItem retract = new JMenuItem("撤销(U)");
	JMenuItem copy = new JMenuItem("复制(C)");
	JMenuItem cut = new JMenuItem("剪切(T)");
	JMenuItem paste = new JMenuItem("粘贴(P)");
	JMenuItem delete = new JMenuItem("删除(L)");
	JMenuItem find = new JMenuItem("查找(F)");
	JMenuItem findNext = new JMenuItem("查找下一个(N)");
	JMenuItem replace = new JMenuItem("替换(R)");
	JMenuItem goTo = new JMenuItem("转到(G)");
	JMenuItem selectAll = new JMenuItem("全选(A)");
	JMenuItem dateAndTime = new JMenuItem("时间/日期(D)");
	// 初始化 格式 菜单
	JMenu format = new JMenu("格式(O)");
	JCheckBoxMenuItem wrap = new JCheckBoxMenuItem("自动换行(W)", false);
	JMenuItem font = new JMenuItem("字体(F)");
	// 初始化 查看 菜单
	JMenu view = new JMenu("查看(V)");
	JCheckBoxMenuItem status = new JCheckBoxMenuItem("状态栏(S)", false);
	// 初始化 帮助 菜单
	JMenu help = new JMenu("帮助(H)");
	JMenuItem title = new JMenuItem("帮助主题(H)");
	JMenuItem about = new JMenuItem("关于记事本(A)");
	// 右键菜单和菜单项
	JPopupMenu popupMenu = new JPopupMenu();
	JMenuItem popRetract = new JMenuItem("撤销(U)");
	JMenuItem popCut = new JMenuItem("剪切(T)");
	JMenuItem popCopy = new JMenuItem("复制(C)");
	JMenuItem popPaste = new JMenuItem("粘贴(P)");
	JMenuItem popSelectAll = new JMenuItem("全选(A)");
	JMenuItem popDelete = new JMenuItem("删除(D)");
	// 获取java中提供的类似剪切板的工具
	Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
	// 是否已经为文本文件命名
	boolean isTitled;
	// 文件名
	String fileName = "无标题";
	// 文件路径
	String filePath = null;
	// 文件打开 保存对话框
	JFileChooser fileChooser = new JFileChooser();
	// 文件信息的散列值,用来判断文件是否被修改过
	int hashCode = -1;
	// //// 外部窗口窗口及其附带属性/////////////////
	FindDlg findDlg;
	ReplaceDlg replaceDlg;
	GoToDlg goToDlg;
	FontDlg fontDlg;
	String findKey = ""; // 查找的字符串
	boolean ignoreCase = true;// 是否忽略大小写,默认忽略
	boolean isUp; // 查找方向,默认向下
	int mileStone; // 查找到的位置记录
	boolean isFirstCall;
	// //////////////////////////////////////
    //模拟状态栏
	JPanel statusBar;
	JTextField tfStatus;
	//为撤销功能做缓存功能的字符串数组
	String str1 = "";
	String str2 = "";
		//String retractStr[] = new String[10];
	int retractNum = 0;//撤销次数
	// 热键
	KeyStroke ks;
	
	/**
	 * 构造函数
	 */
	public NotePad() {
		setSize(600, 500);
		//设置窗口标题
		setTitle(fileName + "-记事本");
		//初始化窗口
		initComponents();
		//窗口关闭事件
		this.addWindowListener(
				new WindowAdapter(){
					public void windowClosing(WindowEvent e){
						onWindowClosing();
					}
				}
		);
		// 显示窗口
		setSize(900, 700);
		setVisible(true);
	}
	public void onWindowClosing(){
		String strTemp = note.getText();
		// 新建的文件
		if (!isTitled) {
			// 文件不为空,没有保存,退出时询问是否保存
			if (strTemp.length() != 0) {
				int isExit = JOptionPane.showConfirmDialog(null, "文件 "
						+ fileName + " 的文字已经改变,想保存文件吗 ?", "记事本",
						JOptionPane.YES_NO_CANCEL_OPTION);
				if (isExit == JOptionPane.YES_OPTION) {
					int result = fileChooser.showSaveDialog(null);
					if (result == JFileChooser.APPROVE_OPTION) {
						File file = fileChooser.getSelectedFile();
						writeFile(file);
						System.exit(0);
					}
				} else if (isExit == JOptionPane.NO_OPTION) {
					System.exit(0);
				} else
					return;
			}
			// 新建的文件,但是文件内容为空,直接退出
			else if (strTemp.length() == 0) {
				System.exit(0);
			}
		}
		// 打开的文件
		else if (isTitled) {
			int newHashCode = 0;
			String fileContent = note.getText();
			newHashCode = fileContent.hashCode();

			// 从散列值判断文件被修改过,退出时询问是否保存
			if (hashCode != newHashCode) {
				int isExit = JOptionPane.showConfirmDialog(null, "文件 "
						+ filePath + " 的文字已经改变,想保存文件吗 ?", "记事本",
						JOptionPane.YES_NO_CANCEL_OPTION);
				if (isExit == JOptionPane.YES_OPTION) {
					int result = fileChooser.showSaveDialog(null);
					if (result == JFileChooser.APPROVE_OPTION) {
						File fileToSave = fileChooser.getSelectedFile();
						writeFile(fileToSave);
						System.exit(0);
					}
				} else if (isExit == JOptionPane.NO_OPTION) {
					System.exit(0);
				} else
					return;
			}
			// 散列值相同,文件没有被修改过,直接退出
			else {
				System.exit(0);
			}
		}
	}
	/**
	 * 初始化窗口
	 */
	public void initComponents() {
		// 添加 文件 菜单
		file.setMnemonic('F');
		build.setMnemonic('E');
		open.setMnemonic('O');
		save.setMnemonic('S');
		reSave.setMnemonic('A');
		setPage.setMnemonic('U');
		print.setMnemonic('P');
		quit.setMnemonic('X');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_N, Event.CTRL_MASK);
		build.setAccelerator(ks);
		file.add(build);
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_O, Event.CTRL_MASK);
		open.setAccelerator(ks);
		file.add(open);
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_S, Event.CTRL_MASK);
		save.setAccelerator(ks);
		file.add(save);
		file.add(reSave);
		file.addSeparator();
		file.add(setPage);
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK);
		print.setAccelerator(ks);
		file.add(print);
		file.addSeparator();
		file.add(quit);
		// 添加 编辑菜单
		edit.setMnemonic('E');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK);
		retract.setAccelerator(ks);
		retract.setMnemonic('U');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.CTRL_MASK);
		cut.setAccelerator(ks);
		cut.setMnemonic('T');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK);
		copy.setAccelerator(ks);
		copy.setMnemonic('C');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK);
		paste.setAccelerator(ks);
		paste.setMnemonic('P');
		ks = KeyStroke.getKeyStroke("DELETE");
		delete.setAccelerator(ks);
		delete.setMnemonic('L');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_F, Event.CTRL_MASK);
		find.setAccelerator(ks);
		find.setMnemonic('F');
		ks = KeyStroke.getKeyStroke("F3");
		findNext.setAccelerator(ks);
		findNext.setMnemonic('N');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.CTRL_MASK);
		replace.setAccelerator(ks);
		replace.setMnemonic('R');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_G, Event.CTRL_MASK);
		goTo.setAccelerator(ks);
		goTo.setMnemonic('G');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK);
		selectAll.setAccelerator(ks);
		selectAll.setMnemonic('A');
		ks = KeyStroke.getKeyStroke("F5");
		dateAndTime.setAccelerator(ks);
		dateAndTime.setMnemonic('D');
		edit.add(retract);
		edit.addSeparator();
		edit.add(cut);
		edit.add(copy);
		edit.add(paste);
		edit.add(delete);
		edit.addSeparator();
		edit.add(find);
		edit.add(findNext);
		edit.add(replace);
		edit.add(goTo);
		edit.addSeparator();
		edit.add(selectAll);
		edit.add(dateAndTime);
		// 添加 格式 菜单
		format.setMnemonic('O');
		ks = KeyStroke.getKeyStroke(KeyEvent.VK_W, Event.CTRL_MASK);
		wrap.setAccelerator(ks);
		wrap.setMnemonic('W');
		font.setMnemonic('F');
		format.add(wrap);
		format.add(font);
		// 添加 查看 菜单
		view.setMnemonic('V');
		status.setMnemonic('S');
		view.add(status);
		// 添加 帮助 菜单
		help.setMnemonic('H');
		title.setMnemonic('H');
		about.setMnemonic('A');
		help.add(title);
		help.addSeparator();
		help.add(about);
		// 向菜单栏中添加菜单
		menuBar.add(file);
		menuBar.add(edit);
		menuBar.add(format);
		menuBar.add(view);
		menuBar.add(help);
		// 在窗口中添加菜单
		setJMenuBar(menuBar);
		// 初始化右键菜单
		popRetract.setMnemonic('U');
		popCut.setMnemonic('T');
		popCopy.setMnemonic('C');
		popPaste.setMnemonic('P');
		popDelete.setMnemonic('D');
		popSelectAll.setMnemonic('A');
		popupMenu.add(popRetract);
		popupMenu.addSeparator();
		popupMenu.add(popCut);
		popupMenu.add(popCopy);
		popupMenu.add(popPaste);
		popupMenu.add(popDelete);
		popupMenu.addSeparator();
		popupMenu.add(popSelectAll);
		// 添加工作区
		note = new JTextArea();
		note.addKeyListener(
				new KeyAdapter(){
					public void keyPressed(KeyEvent e){
						if(e.getKeyCode() == KeyEvent.VK_BACK_SPACE||
								e.getKeyCode()==KeyEvent.VK_ENTER||
								e.getKeyCode()==KeyEvent.VK_DELETE||
								e.getKeyCode()==KeyEvent.VK_INSERT||
								e.getKeyCode()==KeyEvent.VK_SPACE){
							str1 = note.getText();
							str2 = note.getText();
						}
					}
				}
				);
		// 添加右键菜单
		note.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				checkForTriggerEvent(e);
			}

			public void mouseReleased(MouseEvent e) {
				checkForTriggerEvent(e);
			}

			private void checkForTriggerEvent(MouseEvent e) {
				if (e.isPopupTrigger()) {
					popupMenu.show(e.getComponent(), e.getX(), e.getY());
				}
			}
		});
		note.setFont(new Font("宋体", Font.PLAIN, 13));
		jScrollPane = new JScrollPane(note);
		add(jScrollPane,BorderLayout.CENTER);
		//状态栏
		FlowLayout flow = new FlowLayout();

⌨️ 快捷键说明

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