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

📄 java记事本_增加关闭响应.java

📁 能够编辑文本文档的程序
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import java.io.*;
import javax.swing.undo.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.datatransfer.*;
import java.util.List;

public class Notepad4 extends JFrame implements ActionListener, DocumentListener {
	JMenu mFile, mEdit, mMode, mView, mHelp;
	// ---------------文件菜单
	JMenuItem mFile_New, mFile_Open, mFile_Save, mFile_ASave, mFile_Print, mFile_Exit;
	// ---------------编辑菜单
	JMenuItem mEdit_Undo, mEdit_Cut, mEdit_Copy, mEdit_Paste, mEdit_Del, mEdit_Search, mEdit_SearchNext, mEdit_Replace, mEdit_Turnto, mEdit_SelectAll, mEdit_TimeDate;
	// ---------------格式菜单
	JCheckBoxMenuItem formatMenu_LineWrap;
	JMenu formatMenu_Color;
	JMenuItem formatMenu_Font, formatMenu_Color_FgColor, formatMenu_Color_BgColor;
	// ---------------查看菜单
	JCheckBoxMenuItem viewMenu_Status;
	// ---------------帮助菜单
	JMenuItem mHelp_HelpTopics, mHelp_About;
	// ---------------弹出菜单级菜单项
	JPopupMenu popupMenu;
	JMenuItem popupMenu_Undo, popupMenu_Cut, popupMenu_Copy, popupMenu_Paste, popupMenu_Delete, popupMenu_SelectAll;
	// ---------------工具栏按钮
	JButton newButton, openButton, saveButton, saveAsButton, printButton, undoButton, redoButton, cutButton, copyButton, pasteButton, deleteButton, searchButton, timeButton, fontButton, boldButton,
			italicButton, fgcolorButton, bgcolorButton, helpButton;
	// 文本编辑区域
	static JTextArea Text;
	// 状态栏标签
	JLabel statusLabel1, statusLabel2, statusLabel3;
	JToolBar statusBar;
	// ---------------系统剪贴板
	Toolkit toolKit = Toolkit.getDefaultToolkit();
	Clipboard clipBoard = toolKit.getSystemClipboard();
	// ---------------创建撤消操作管理器
	protected UndoManager undo = new UndoManager();
	protected UndoableEditListener undoHandler = new UndoHandler();
	// ----------------其它变量
	boolean isNewFile = true; // 是否新文件(未保存过的)
	File currentFile; // 当前文件名
	String oldValue; // 存放编辑区原来的内容,用于比较文本是否有改动
	JButton fontOkButton; // 字体设置里的"确定"按钮
	// ----------------设置编辑区默认字体
	protected Font defaultFont = new Font("宋体", Font.PLAIN, 12);
	GregorianCalendar time = new GregorianCalendar();
	int hour = time.get(Calendar.HOUR_OF_DAY);
	int min = time.get(Calendar.MINUTE);
	int second = time.get(Calendar.SECOND);
	File saveFileName = null, fileName = null;

	public Notepad4() {
		super("VXBB的记事本");
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		Container container = getContentPane();
		// System.out.println(Text.getDragEnabled()); //支持自动拖放
		JScrollPane scroll = new JScrollPane(Text);
		scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		Text.setWrapStyleWord(true); // 设置单词在一行不足容纳时换行
		Text.setLineWrap(true);
		Text.setFont(defaultFont); // 设置编辑区默认字体
		Text.setBackground(Color.white); // 设置编辑区默认背景色
		Text.setForeground(Color.black); // 设置编辑区默认前景色
		oldValue = Text.getText(); // 获取原文本编辑区的内容
		// --------------------------编辑区注册事件监听
		Text.getDocument().addUndoableEditListener(undoHandler); // 添加负责通知任何更改的撤消侦听器
		Text.getDocument().addDocumentListener(this); // 添加负责通知任何更改的文档侦听器
		JMenuBar MenuBar = new JMenuBar();
		mFile = new JMenu("文件(F)", true); // 创建菜单
		mEdit = new JMenu("编辑(E)", true);
		mMode = new JMenu("格式(O)", true);
		mView = new JMenu("查看(V)", true);
		mHelp = new JMenu("帮助(H)", true);
		mEdit.addActionListener(new ActionListener() // 注册事件监听
				{
					public void actionPerformed(ActionEvent e) {
						checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性
					}
				});
		mFile.setMnemonic('F');
		mEdit.setMnemonic('E');
		mMode.setMnemonic('O');
		mView.setMnemonic('V');
		mHelp.setMnemonic('H');
		MenuBar.add(mFile);
		MenuBar.add(mEdit);
		MenuBar.add(mMode);
		MenuBar.add(mView);
		MenuBar.add(mHelp);
		// --------------文件菜单
		mFile_New = new JMenuItem("新建(N)", 'N');
		mFile_Open = new JMenuItem("打开(O)", 'O');
		mFile_Save = new JMenuItem("保存(S)", 'S');
		mFile_ASave = new JMenuItem("另存为(A)", 'A');
		mFile_Print = new JMenuItem("打印(P)", 'P');
		mFile_Exit = new JMenuItem("退出(X)", 'X');
		mFile_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
		mFile_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
		mFile_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
		mFile_Print.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK));
		mFile_New.addActionListener(this); // 注册事件监听
		mFile_Open.addActionListener(this);
		mFile_Save.addActionListener(this);
		mFile_ASave.addActionListener(this);
		mFile_Print.addActionListener(this);
		mFile_Exit.addActionListener(this);
		mFile.add(mFile_New); // 添加菜单项
		mFile.add(mFile_Open);
		mFile.add(mFile_Save);
		mFile.add(mFile_ASave);
		mFile.addSeparator(); // 添加分割线
		mFile.add(mFile_Print);
		mFile.addSeparator(); // 添加分割线
		mFile.add(mFile_Exit);

		// --------------编辑菜单
		mEdit_Undo = new JMenuItem("撤消(U)", 'U');
		mEdit_Cut = new JMenuItem("剪切(T)", 'T');
		mEdit_Copy = new JMenuItem("复制(C)", 'C');
		mEdit_Paste = new JMenuItem("粘贴(P)", 'P');
		mEdit_Del = new JMenuItem("删除(L)", 'L');
		mEdit_Search = new JMenuItem("查找(F)", 'F');
		mEdit_SearchNext = new JMenuItem("查找下一个(N)", 'N');
		mEdit_Replace = new JMenuItem("替换(R)", 'R');
		mEdit_Turnto = new JMenuItem("转到(G)", 'G');
		mEdit_SelectAll = new JMenuItem("全选(A)", 'A');
		mEdit_TimeDate = new JMenuItem("时间/日期(D)", 'D');
		mEdit_Cut.setEnabled(false);
		mEdit_Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
		mEdit_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
		mEdit_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
		mEdit_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
		mEdit_Del.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
		mEdit_Search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));
		mEdit_SearchNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0));
		mEdit_Replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK));
		mEdit_Turnto.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK));
		mEdit_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
		mEdit_TimeDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
		mEdit_Undo.addActionListener(this); // 注册事件监听
		mEdit_Cut.addActionListener(this);
		mEdit_Copy.addActionListener(this);
		mEdit_Paste.addActionListener(this);
		mEdit_Del.addActionListener(this);
		mEdit_Search.addActionListener(this);
		mEdit_SearchNext.addActionListener(this);
		mEdit_Replace.addActionListener(this);
		mEdit_Turnto.addActionListener(this);
		mEdit_SelectAll.addActionListener(this);
		mEdit_TimeDate.addActionListener(this);
		mEdit.add(mEdit_Undo); // 添加菜单项
		mEdit.addSeparator(); // 添加分割线
		mEdit.add(mEdit_Cut);
		mEdit.add(mEdit_Copy);
		mEdit.add(mEdit_Paste);
		mEdit.add(mEdit_Del);
		mEdit.addSeparator();
		mEdit.add(mEdit_Search);
		mEdit.add(mEdit_SearchNext);
		mEdit.add(mEdit_Replace);
		mEdit.add(mEdit_Turnto);
		mEdit.addSeparator();
		mEdit.add(mEdit_SelectAll);
		mEdit.add(mEdit_TimeDate);

		// --------------格式菜单
		formatMenu_LineWrap = new JCheckBoxMenuItem("自动换行(W)");
		formatMenu_LineWrap.setMnemonic('W');
		formatMenu_LineWrap.setState(true);
		formatMenu_Font = new JMenuItem("字体(F)", 'F');
		formatMenu_Color = new JMenu("颜色");
		formatMenu_Color_FgColor = new JMenuItem("字体颜色");
		formatMenu_Color_BgColor = new JMenuItem("背景颜色");
		formatMenu_LineWrap.addActionListener(this); // 注册事件监听
		formatMenu_Font.addActionListener(this);
		formatMenu_Color_FgColor.addActionListener(this);
		formatMenu_Color_BgColor.addActionListener(this);
		mMode.add(formatMenu_LineWrap); // 添加菜单项
		mMode.addSeparator();
		mMode.add(formatMenu_Font);
		mMode.add(formatMenu_Color);
		formatMenu_Color.add(formatMenu_Color_FgColor);
		formatMenu_Color.add(formatMenu_Color_BgColor);

		// --------------查看菜单
		viewMenu_Status = new JCheckBoxMenuItem("状态栏(S)");
		viewMenu_Status.setMnemonic('S');
		viewMenu_Status.setState(true);
		viewMenu_Status.addActionListener(this);
		mView.add(viewMenu_Status);

		// --------------帮助菜单
		mHelp_HelpTopics = new JMenuItem("帮助(H)", 'H');
		mHelp_About = new JMenuItem("关于(A)", 'A');
		mHelp_HelpTopics.addActionListener(this);
		mHelp_About.addActionListener(this);
		mHelp.add(mHelp_HelpTopics);
		mHelp.addSeparator(); // 添加分割线
		mHelp.add(mHelp_About);

		// -------------------创建右键弹出菜单
		popupMenu = new JPopupMenu();
		popupMenu_Undo = new JMenuItem("撤消(U)", 'U');
		popupMenu_Cut = new JMenuItem("剪切(T)", 'T');
		popupMenu_Copy = new JMenuItem("复制(C)", 'C');
		popupMenu_Paste = new JMenuItem("粘贴(P)", 'P');
		popupMenu_Delete = new JMenuItem("删除(D)", 'D');
		popupMenu_SelectAll = new JMenuItem("全选(A)", 'A');

		popupMenu_Undo.setEnabled(false); // 撤消选项初始设为不可用

		// ---------------向右键菜单添加菜单项和分隔符
		popupMenu.add(popupMenu_Undo);
		popupMenu.addSeparator();
		popupMenu.add(popupMenu_Cut);
		popupMenu.add(popupMenu_Copy);
		popupMenu.add(popupMenu_Paste);
		popupMenu.add(popupMenu_Delete);
		popupMenu.addSeparator();
		popupMenu.add(popupMenu_SelectAll);
		// --------------------右键菜单注册事件
		popupMenu_Undo.addActionListener(this);
		popupMenu_Cut.addActionListener(this);
		popupMenu_Copy.addActionListener(this);
		popupMenu_Paste.addActionListener(this);
		popupMenu_Delete.addActionListener(this);
		popupMenu_SelectAll.addActionListener(this);
		// --------------------文本编辑区注册右键菜单事件
		Text.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());// 在组件调用者的坐标空间中的位置
																			// X、Y
																			// 显示弹出菜单。
				else {
					statusLabel3.setText("当前光标所在行数: " + getlineNumber());
				}
				checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性
				Text.requestFocus(); // 编辑区获取焦点
			}
		});

		// ----------------------------创建工具栏
		JPanel toolBar = new JPanel();
		toolBar.setLayout(new FlowLayout(FlowLayout.LEFT));

		Icon newIcon = new ImageIcon("Icons/new.gif");
		Icon openIcon = new ImageIcon("Icons/open.gif");
		Icon saveIcon = new ImageIcon("Icons/save.gif");
		Icon saveAsIcon = new ImageIcon("Icons/saveas.gif");
		Icon printIcon = new ImageIcon("Icons/print.gif");
		Icon undoIcon = new ImageIcon("Icons/undo.gif");
		Icon cutIcon = new ImageIcon("Icons/cut.gif");
		Icon copyIcon = new ImageIcon("Icons/copy.gif");
		Icon pasteIcon = new ImageIcon("Icons/paste.gif");
		Icon deleteIcon = new ImageIcon("Icons/delete.gif");
		Icon searchIcon = new ImageIcon("Icons/search.gif");
		Icon timeIcon = new ImageIcon("Icons/time.gif");
		Icon fontIcon = new ImageIcon("Icons/font.gif");
		Icon boldIcon = new ImageIcon("Icons/bold.gif");
		Icon italicIcon = new ImageIcon("Icons/italic.gif");
		Icon bgcolorIcon = new ImageIcon("Icons/bgcolor.gif");
		Icon fgcolorIcon = new ImageIcon("Icons/fgcolor.gif");
		Icon helpIcon = new ImageIcon("Icons/help.gif");

		newButton = new JButton(newIcon);
		openButton = new JButton(openIcon);
		saveButton = new JButton(saveIcon);
		saveAsButton = new JButton(saveAsIcon);
		printButton = new JButton(printIcon);
		undoButton = new JButton(undoIcon);
		undoButton.setEnabled(false);
		cutButton = new JButton(cutIcon);
		cutButton.setEnabled(false);
		copyButton = new JButton(copyIcon);
		copyButton.setEnabled(false);
		pasteButton = new JButton(pasteIcon);
		pasteButton.setEnabled(false);
		deleteButton = new JButton(deleteIcon);
		deleteButton.setEnabled(false);
		searchButton = new JButton(searchIcon);
		timeButton = new JButton(timeIcon);
		fontButton = new JButton(fontIcon);
		boldButton = new JButton(boldIcon);
		italicButton = new JButton(italicIcon);
		fgcolorButton = new JButton(fgcolorIcon);
		bgcolorButton = new JButton(bgcolorIcon);
		helpButton = new JButton(helpIcon);

		newButton.setPreferredSize(new Dimension(22, 22));
		openButton.setPreferredSize(new Dimension(22, 22));
		saveButton.setPreferredSize(new Dimension(22, 22));
		saveAsButton.setPreferredSize(new Dimension(22, 22));
		printButton.setPreferredSize(new Dimension(22, 22));
		undoButton.setPreferredSize(new Dimension(22, 22));
		cutButton.setPreferredSize(new Dimension(22, 22));
		copyButton.setPreferredSize(new Dimension(22, 22));
		pasteButton.setPreferredSize(new Dimension(22, 22));
		deleteButton.setPreferredSize(new Dimension(22, 22));
		searchButton.setPreferredSize(new Dimension(22, 22));
		timeButton.setPreferredSize(new Dimension(22, 22));
		fontButton.setPreferredSize(new Dimension(22, 22));
		boldButton.setPreferredSize(new Dimension(22, 22));
		italicButton.setPreferredSize(new Dimension(22, 22));
		fgcolorButton.setPreferredSize(new Dimension(22, 22));
		bgcolorButton.setPreferredSize(new Dimension(22, 22));
		helpButton.setPreferredSize(new Dimension(22, 22));
		// -----------------------------------注册工具栏按钮事件
		newButton.addActionListener(this);
		openButton.addActionListener(this);
		saveButton.addActionListener(this);
		saveAsButton.addActionListener(this);
		printButton.addActionListener(this);
		undoButton.addActionListener(this);
		cutButton.addActionListener(this);
		copyButton.addActionListener(this);
		pasteButton.addActionListener(this);
		deleteButton.addActionListener(this);
		searchButton.addActionListener(this);
		timeButton.addActionListener(this);
		fontButton.addActionListener(this);
		boldButton.addActionListener(this);
		italicButton.addActionListener(this);
		fgcolorButton.addActionListener(this);
		bgcolorButton.addActionListener(this);
		helpButton.addActionListener(this);
		// ------------------------设置按钮提示文字
		newButton.setToolTipText("新建");
		openButton.setToolTipText("打开");
		saveButton.setToolTipText("保存");
		saveAsButton.setToolTipText("另存为");
		printButton.setToolTipText("打印");
		undoButton.setToolTipText("撤消");
		cutButton.setToolTipText("剪切");
		copyButton.setToolTipText("复制");
		pasteButton.setToolTipText("粘贴");
		deleteButton.setToolTipText("删除所选");
		searchButton.setToolTipText("查找与替换");
		timeButton.setToolTipText("插入时间/日期");
		fontButton.setToolTipText("设置字体");
		boldButton.setToolTipText("粗体");
		italicButton.setToolTipText("斜体");
		fgcolorButton.setToolTipText("设置字体颜色");
		bgcolorButton.setToolTipText("设置背景颜色");
		helpButton.setToolTipText("帮助");
		// 设置撤消、重做、剪切、复制、粘贴、删除等工具栏按钮不可用时的图片(灰色)
		undoButton.setDisabledIcon(new ImageIcon("Icons/undo1.gif"));
		cutButton.setDisabledIcon(new ImageIcon("Icons/cut1.gif"));
		copyButton.setDisabledIcon(new ImageIcon("Icons/copy1.gif"));
		pasteButton.setDisabledIcon(new ImageIcon("Icons/paste1.gif"));
		deleteButton.setDisabledIcon(new ImageIcon("Icons/delete1.gif"));
		// ------------------------向工具栏添加按钮
		toolBar.add(newButton);
		toolBar.add(openButton);
		toolBar.add(saveButton);
		toolBar.add(saveAsButton);
		toolBar.add(printButton);
		toolBar.add(undoButton);
		toolBar.add(cutButton);
		toolBar.add(copyButton);
		toolBar.add(pasteButton);
		toolBar.add(deleteButton);
		toolBar.add(searchButton);
		toolBar.add(timeButton);
		toolBar.add(fontButton);
		toolBar.add(boldButton);
		toolBar.add(italicButton);
		toolBar.add(fgcolorButton);
		toolBar.add(bgcolorButton);
		toolBar.add(helpButton);

⌨️ 快捷键说明

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