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

📄 notepad.java

📁 我用Java写的记事本的源代码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
 import java.awt.*;//软件包 java.awt:包含用于创建用户界面和绘制图形图像的所有类
 import java.awt.event.*;//java.awt.event:提供处理由 AWT 组件所激发的各类事件的接口和类
 import java.text.*;//软件包 org.w3c.dom:为文档对象模型 (DOM) 提供接口,该模型是 Java API for XML Processing 的组件 API
 import java.util.*;//Date的父类
 import java.io.*;//java.io:通过数据流、序列化和文件系统提供系统输入和输出
 import javax.swing.undo.*;//javax.swing.undo:允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持
 import javax.swing.border.*;//javax.swing.border:提供围绕 Swing 组件绘制特殊边框的类和接口
 import javax.swing.*;//javax.swing:提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同
 import javax.swing.text.*;//javax.swing.text:提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类
 import javax.swing.event.*;//javax.swing.event:供 Swing 组件触发的事件使用
 import java.awt.datatransfer.*;//java.awt.datatransfer:提供在应用程序之间和在应用程序内部传输数据的接口和类


public class Notepad extends JFrame implements ActionListener,DocumentListener
{	//菜单
	JMenu fileMenu,editMenu,formatMenu,viewMenu,helpMenu;
	//右键弹出菜单项
	JPopupMenu popupMenu;
	JMenuItem popupMenu_Undo,popupMenu_Cut,popupMenu_Copy,popupMenu_Paste,popupMenu_Delete,popupMenu_SelectAll;
	//“文件”的菜单项
	JMenuItem fileMenu_New,fileMenu_Open,fileMenu_Save,fileMenu_SaveAs,fileMenu_PageSetUp,fileMenu_Print,fileMenu_Exit;
	//“编辑”的菜单项
	JMenuItem editMenu_Undo,editMenu_Cut,editMenu_Copy,editMenu_Paste,editMenu_Delete,editMenu_Find,editMenu_FindNext,editMenu_Replace,editMenu_GoTo,editMenu_SelectAll,editMenu_TimeDate;
	//“格式”的菜单项
	JCheckBoxMenuItem formatMenu_LineWrap;
	JMenuItem formatMenu_Font;
	//“查看”的菜单项
	JCheckBoxMenuItem viewMenu_Status;
	//“帮助”的菜单项
	JMenuItem helpMenu_HelpTopics,helpMenu_AboutNotepad;
	//“文本”编辑区域
	JTextArea editArea;
	//状态栏标签
	JLabel statusLabel;
	//系统剪贴板
	Toolkit toolkit=Toolkit.getDefaultToolkit();
	Clipboard clipBoard=toolkit.getSystemClipboard();
	//创建撤销操作管理器(与撤销操作有关)
	protected UndoManager undo=new UndoManager();
	protected UndoableEditListener undoHandler=new UndoHandler();
	//其他变量
	String oldValue;//存放编辑区原来的内容,用于比较文本是否有改动
	boolean isNewFile=true;//是否新文件(未保存过的)
	File currentFile;//当前文件名
	//构造函数开始
	public Notepad()
	{	super("张选仲的记事本");
		//创建菜单条
		JMenuBar menuBar=new JMenuBar();
		//创建文件菜单及菜单项并注册事件监听
		fileMenu=new JMenu("文件(F)");
		fileMenu.setMnemonic('F');//设置快捷键ALT+F

		fileMenu_New=new JMenuItem("新建(N)");
		fileMenu_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
		fileMenu_New.addActionListener(this);

		fileMenu_Open=new JMenuItem("打开(O)...");
		fileMenu_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
		fileMenu_Open.addActionListener(this);

		fileMenu_Save=new JMenuItem("保存(S)");
		fileMenu_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
		fileMenu_Save.addActionListener(this);

		fileMenu_SaveAs=new JMenuItem("另存为(A)...");
		fileMenu_SaveAs.addActionListener(this);

		fileMenu_PageSetUp=new JMenuItem("页面设置(U)...");
		fileMenu_PageSetUp.addActionListener(this);

		fileMenu_Print=new JMenuItem("打印(P)...");
		fileMenu_Print.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK)); 
		fileMenu_Print.addActionListener(this);

		fileMenu_Exit=new JMenuItem("退出(X)");
		fileMenu_Exit.addActionListener(this);

		//创建编辑菜单及菜单项并注册事件监听
		editMenu=new JMenu("编辑(E)");
		editMenu.setMnemonic('E');//设置快捷键ALT+E
		//当选择编辑菜单时,设置剪切、复制、粘贴、删除等功能的可用性
		editMenu.addMenuListener(new MenuListener()
		{	public void menuCanceled(MenuEvent e)//取消菜单时调用
			{	checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性
			}
			public void menuDeselected(MenuEvent e)//取消选择某个菜单时调用
			{	checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性
			}
			public void menuSelected(MenuEvent e)//选择某个菜单时调用
			{	checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性
			}
		});

		editMenu_Undo=new JMenuItem("撤销(U)");
		editMenu_Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
		editMenu_Undo.addActionListener(this);
		editMenu_Undo.setEnabled(false);

		editMenu_Cut=new JMenuItem("剪切(T)");
		editMenu_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
		editMenu_Cut.addActionListener(this);

		editMenu_Copy=new JMenuItem("复制(C)");
		editMenu_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
		editMenu_Copy.addActionListener(this);

		editMenu_Paste=new JMenuItem("粘贴(P)");
		editMenu_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
		editMenu_Paste.addActionListener(this);

		editMenu_Delete=new JMenuItem("删除(D)");
		editMenu_Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));
		editMenu_Delete.addActionListener(this);

		editMenu_Find=new JMenuItem("查找(F)...");
		editMenu_Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
		editMenu_Find.addActionListener(this);

		editMenu_FindNext=new JMenuItem("查找下一个(N)");
		editMenu_FindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));
		editMenu_FindNext.addActionListener(this);

		editMenu_Replace = new JMenuItem("替换(R)...",'R'); 
		editMenu_Replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK)); 
		editMenu_Replace.addActionListener(this);

		editMenu_GoTo = new JMenuItem("转到(G)...",'G'); 
		editMenu_GoTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK)); 
		editMenu_GoTo.addActionListener(this);

		editMenu_SelectAll = new JMenuItem("全选",'A'); 
		editMenu_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); 
		editMenu_SelectAll.addActionListener(this);

		editMenu_TimeDate = new JMenuItem("时间/日期(D)",'D');
		editMenu_TimeDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0));
		editMenu_TimeDate.addActionListener(this);

		//创建格式菜单及菜单项并注册事件监听
		formatMenu=new JMenu("格式(O)");
		formatMenu.setMnemonic('O');//设置快捷键ALT+O

		formatMenu_LineWrap=new JCheckBoxMenuItem("自动换行(W)");
		formatMenu_LineWrap.setMnemonic('W');//设置快捷键ALT+W
		formatMenu_LineWrap.setState(true);
		formatMenu_LineWrap.addActionListener(this);

		formatMenu_Font=new JMenuItem("字体(F)...");
		formatMenu_Font.addActionListener(this);

		//创建查看菜单及菜单项并注册事件监听
		viewMenu=new JMenu("查看(V)");
		viewMenu.setMnemonic('V');//设置快捷键ALT+V

		viewMenu_Status=new JCheckBoxMenuItem("状态栏(S)");
		viewMenu_Status.setMnemonic('S');//设置快捷键ALT+S
		viewMenu_Status.setState(true);
		viewMenu_Status.addActionListener(this);

		//创建帮助菜单及菜单项并注册事件监听
		helpMenu = new JMenu("帮助(H)");
		helpMenu.setMnemonic('H');//设置快捷键ALT+H

		helpMenu_HelpTopics = new JMenuItem("帮助主题(H)"); 
		helpMenu_HelpTopics.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));
		helpMenu_HelpTopics.addActionListener(this);

		helpMenu_AboutNotepad = new JMenuItem("关于记事本(A)"); 
		helpMenu_AboutNotepad.addActionListener(this);

		//向菜单条添加"文件"菜单及菜单项
		menuBar.add(fileMenu); 
		fileMenu.add(fileMenu_New); 
		fileMenu.add(fileMenu_Open); 
		fileMenu.add(fileMenu_Save); 
		fileMenu.add(fileMenu_SaveAs); 
		fileMenu.addSeparator();		//分隔线
		fileMenu.add(fileMenu_PageSetUp); 
		fileMenu.add(fileMenu_Print); 
		fileMenu.addSeparator();		//分隔线 
		fileMenu.add(fileMenu_Exit); 

		//向菜单条添加"编辑"菜单及菜单项 
		menuBar.add(editMenu); 
		editMenu.add(editMenu_Undo);  
		editMenu.addSeparator();		//分隔线 
		editMenu.add(editMenu_Cut); 
		editMenu.add(editMenu_Copy); 
		editMenu.add(editMenu_Paste); 
		editMenu.add(editMenu_Delete); 
		editMenu.addSeparator(); 		//分隔线
		editMenu.add(editMenu_Find); 
		editMenu.add(editMenu_FindNext); 
		editMenu.add(editMenu_Replace);
		editMenu.add(editMenu_GoTo); 
		editMenu.addSeparator();  		//分隔线
		editMenu.add(editMenu_SelectAll); 
		editMenu.add(editMenu_TimeDate);

		//向菜单条添加"格式"菜单及菜单项		
		menuBar.add(formatMenu); 
		formatMenu.add(formatMenu_LineWrap); 
		formatMenu.add(formatMenu_Font);

		//向菜单条添加"查看"菜单及菜单项 
		menuBar.add(viewMenu); 
		viewMenu.add(viewMenu_Status);

		//向菜单条添加"帮助"菜单及菜单项
		menuBar.add(helpMenu);
		helpMenu.add(helpMenu_HelpTopics);
		helpMenu.addSeparator();
		helpMenu.add(helpMenu_AboutNotepad);
				
		//向窗口添加菜单条				
		this.setJMenuBar(menuBar);

		//创建文本编辑区并添加滚动条
		editArea=new JTextArea(20,50);
		JScrollPane scroller=new JScrollPane(editArea);
		scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		this.add(scroller,BorderLayout.CENTER);//向窗口添加文本编辑区
		editArea.setWrapStyleWord(true);//设置单词在一行不足容纳时换行
		editArea.setLineWrap(true);//设置文本编辑区自动换行默认为true,即会"自动换行"
		oldValue=editArea.getText();//获取原文本编辑区的内容

		//编辑区注册事件监听(与撤销操作有关)
		editArea.getDocument().addUndoableEditListener(undoHandler);
		editArea.getDocument().addDocumentListener(this);

		//创建右键弹出菜单
		popupMenu=new JPopupMenu();
		popupMenu_Undo=new JMenuItem("撤销(U)");
		popupMenu_Cut=new JMenuItem("剪切(T)");
		popupMenu_Copy=new JMenuItem("复制(C)");
		popupMenu_Paste=new JMenuItem("粘帖(P)");
		popupMenu_Delete=new JMenuItem("删除(D)");
		popupMenu_SelectAll=new JMenuItem("全选(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);

		//文本编辑区注册右键菜单事件
		editArea.addMouseListener(new MouseAdapter()
		{	public void mousePressed(MouseEvent e)
			{	if(e.isPopupTrigger())//返回此鼠标事件是否为该平台的弹出菜单触发事件
				{	popupMenu.show(e.getComponent(),e.getX(),e.getY());//在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单
				}
				checkMenuItemEnabled();//设置剪切,复制,粘帖,删除等功能的可用性
				editArea.requestFocus();//编辑区获取焦点
			}
			public void mouseReleased(MouseEvent e)
			{	if(e.isPopupTrigger())//返回此鼠标事件是否为该平台的弹出菜单触发事件
				{	popupMenu.show(e.getComponent(),e.getX(),e.getY());//在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单
				}
				checkMenuItemEnabled();//设置剪切,复制,粘帖,删除等功能的可用性
				editArea.requestFocus();//编辑区获取焦点
			}
		});//文本编辑区注册右键菜单事件结束

		//创建和添加状态栏
		statusLabel=new JLabel(" 按F1获取帮助");
		this.add(statusLabel,BorderLayout.SOUTH);//向窗口添加状态栏标签

		//设置窗口在屏幕上的位置、大小和可见性 
		this.setLocation(100,100);
		this.setSize(650,550);
		this.setVisible(true);
		//添加窗口监听器
		addWindowListener(new WindowAdapter()
		{	public void windowClosing(WindowEvent e)
			{	exitWindowChoose();
			}
		});

		checkMenuItemEnabled();
		editArea.requestFocus();
	}//构造函数Notepad结束
	
	//设置菜单项的可用性:剪切,复制,粘帖,删除功能
	public void checkMenuItemEnabled()
	{	String selectText=editArea.getSelectedText();
		if(selectText==null)
		{	editMenu_Cut.setEnabled(false);
			popupMenu_Cut.setEnabled(false);
			editMenu_Copy.setEnabled(false);
			popupMenu_Copy.setEnabled(false);
			editMenu_Delete.setEnabled(false);
			popupMenu_Delete.setEnabled(false);
		}
		else
		{	editMenu_Cut.setEnabled(true);

⌨️ 快捷键说明

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