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

📄 notebook.txt

📁 记事本的源代码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import java.io.*;
import javax.swing.undo.*;
import javax.swing.border.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.datatransfer.*;

public class NoteBook extends JFrame implements ActionListener,DocumentListener{ 	 
 	//定义变量
    //菜单
	
	JMenu fileMenu,editMenu,formatMenu,helpMenu;
	
	//"文件"的菜单项
	JMenuItem fileMenu_New,fileMenu_Open,fileMenu_Save,fileMenu_SaveAs,fileMenu_Exit;

	//"编辑"的菜单项	
	JMenuItem editMenu_Undo,editMenu_Cut,editMenu_Copy,editMenu_Paste,editMenu_Delete,editMenu_Find,editMenu_FindNext,editMenu_Replace,
			  editMenu_SelectAll,editMenu_TimeDate;
			
	//"格式"的菜单项
	JCheckBoxMenuItem formatMenu_LineWrap;
	JMenuItem formatMenu_Font;
	
	//"帮助"的菜单项
	JMenuItem helpMenu_HelpTopics,helpMenu_About;
	
	//文本编辑区域
	JTextArea editArea;

	//弹出菜单及菜单项
	JPopupMenu popupMenu;
	JMenuItem popupMenu_Undo,popupMenu_Cut,popupMenu_Copy,popupMenu_Paste,popupMenu_Delete,popupMenu_SelectAll;
	
	//系统剪贴板
	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);
		
	//构造函数开始 
	public NoteBook()
	{
		super("记事本");
		
		//获取容器
		Container container=getContentPane();

	    //创建文件菜单及菜单项并注册事件监听
		JMenuBar menuBar = new JMenuBar(); 
	    JMenu fileMenu = new JMenu("文件(F)", true); 
		fileMenu.setMnemonic('F'); 

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

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

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

		fileMenu_SaveAs = new JMenuItem("另存为(A)...", 'A'); 
		fileMenu_SaveAs.addActionListener(this); 
		
	    fileMenu_Exit = new JMenuItem("退出(X)",'X'); 
		fileMenu_Exit.addActionListener(this); 
	
		//创建编辑菜单及菜单项并注册事件监听
		JMenu editMenu = new JMenu("编辑(E)", true);
		editMenu.setMnemonic('E'); 
		editMenu.addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent e){
					checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性
				}
			}
		);

		editMenu_Undo = new JMenuItem("撤消(U)",'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)",'T'); 
		editMenu_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); 
		editMenu_Cut.addActionListener(this); 

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

		editMenu_Paste = new JMenuItem("粘贴(P)",'P'); 
		editMenu_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); 
		editMenu_Paste.addActionListener(this);
		
		editMenu_Delete = new JMenuItem("删除(L)",'L'); 
		editMenu_Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); 
		editMenu_Delete.addActionListener(this); 
		
		editMenu_Find = new JMenuItem("查找(F)...",'F'); 
		editMenu_Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK)); 
		editMenu_Find.addActionListener(this);
		
		editMenu_FindNext = new JMenuItem("查找下一个(N)",'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_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);

		//创建格式菜单及菜单项并注册事件监听
		JMenu formatMenu = new JMenu("格式(O)", true);
		formatMenu.setMnemonic('O'); 
		
		formatMenu_LineWrap = new JCheckBoxMenuItem("自动换行(W)"); 
		formatMenu_LineWrap.setMnemonic('W'); 
		formatMenu_LineWrap.setState(true); 
		formatMenu_LineWrap.addActionListener(this); 
        
		formatMenu_Font = new JMenuItem("字体(F)...",'F');
		formatMenu_Font.addActionListener(this);

		//创建帮助菜单及菜单项并注册事件监听
		JMenu helpMenu = new JMenu("帮助(H)", true);
		helpMenu.setMnemonic('H'); 

		helpMenu_HelpTopics = new JMenuItem("帮助主题(H)",'H'); 
		helpMenu_HelpTopics.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));
		helpMenu_HelpTopics.addActionListener(this); 
		
		helpMenu_About = new JMenuItem("关于...(A)",'A'); 
		helpMenu_About.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_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.addSeparator();  		//分隔线
		editMenu.add(editMenu_SelectAll); 
		editMenu.add(editMenu_TimeDate);
		
		//向菜单条添加"格式"菜单及菜单项		
		menuBar.add(formatMenu); 
		formatMenu.add(formatMenu_LineWrap); 
		formatMenu.add(formatMenu_Font); 

		//向菜单条添加"帮助"菜单及菜单项
		menuBar.add(helpMenu);
		helpMenu.add(helpMenu_HelpTopics);
		helpMenu.addSeparator();
		helpMenu.add(helpMenu_About);

		//向窗口添加菜单条				
		this.setJMenuBar(menuBar);
				
		//创建文本编辑区并添加滚动条
		editArea=new JTextArea(20,50);
		JScrollPane scroller=new JScrollPane(editArea);
		container.add(scroller,BorderLayout.CENTER);//向容器添加文本编辑区
		editArea.setWrapStyleWord(true);			//设置单词在一行不足容纳时换行
		editArea.setLineWrap(true);					//设置文本编辑区自动换行默认为true,即会"自动换行"
		editArea.setFont(defaultFont);				//设置编辑区默认字体
        oldValue=editArea.getText();				//获取原文本编辑区的内容		
		
		//编辑区注册事件监听
		editArea.getDocument().addUndoableEditListener(undoHandler);
		editArea.getDocument().addDocumentListener(this); 
		//创建右键弹出菜单
		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);
		
		//文本编辑区注册右键菜单事件
		editArea.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());
					checkMenuItemEnabled();		//设置剪切、复制、粘贴、删除等功能的可用性
					editArea.requestFocus();	//编辑区获取焦点
				}
				
			});
	
 		//设置窗口在屏幕上的位置、大小和可见性 
		this.setLocation(100,100);
		this.setSize(650,550);
		this.setVisible(true);
		
		checkMenuItemEnabled();
		editArea.requestFocus();
	
		 	
	}					/*构造函数NoteBook结束*/
	
	//设置菜单项的可用性:剪切,复制,粘贴,删除功能	
	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);
      			popupMenu_Cut.setEnabled(true); 
 		        editMenu_Copy.setEnabled(true);
      			popupMenu_Copy.setEnabled(true);
                editMenu_Delete.setEnabled(true);
      			popupMenu_Delete.setEnabled(true);
            }
		
		//粘贴功能可用性判断
		Transferable contents=clipBoard.getContents(this);
		    if(contents==null) 
		    {
		       	editMenu_Paste.setEnabled(false);
		       	popupMenu_Paste.setEnabled(false);

		    }
			else
			{
				editMenu_Paste.setEnabled(true);
				popupMenu_Paste.setEnabled(true);
	
			}	
		
	}/*方法checkMenuItemEnabled()结束*/
	
	//查找与替换功能
	public void mySearch(){
		
		final JDialog findDialog=new JDialog(this,"查找与替换",true);
	
		Container con=findDialog.getContentPane();
		con.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		JLabel searchContentLabel=new JLabel("查找内容(N) :");
		JLabel replaceContentLabel=new JLabel("替换为(P)  :");
		final JTextField findText=new JTextField(30);
		final JTextField replaceText=new JTextField(30);
		final JCheckBox matchcase =new JCheckBox("区分大小写(C)");

		ButtonGroup bGroup=new ButtonGroup();
		final JRadioButton up=new JRadioButton("向上(U)");
		final JRadioButton down=new JRadioButton("向下(D)");
		down.setSelected(true);
		bGroup.add(up);
		bGroup.add(down);
		JButton searchNext=new JButton("查找下一个(F)");
		JButton replace=new JButton("替换(R)");
		final JButton replaceAll=new JButton("全部替换(A)");
		
		//"替换"按钮的事件处理
		replace.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				
				if(replaceText.getText().length() == 0 && editArea.getSelectedText()!=null) 
					editArea.replaceSelection(""); 
				if(replaceText.getText().length() > 0 && editArea.getSelectedText()!= null) 
					editArea.replaceSelection(replaceText.getText()); 
			}
		});
		
		//"替换全部"按钮的事件处理
		replaceAll.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				
				editArea.setCaretPosition(0);	//将光标放到编辑区开头	
				int a=0,b=0,replaceCount=0;
					
				if(findText.getText().length()==0)
					{
						JOptionPane.showMessageDialog(findDialog,"请填写查找内容!","提示",JOptionPane.WARNING_MESSAGE);
						findText.requestFocus(true);
						return;
					}
				while( a > -1) { 
														 
					int FindStartPos=editArea.getCaretPosition();
					String str1, str2, str3, str4, strA, strB; 
					str1 = editArea.getText(); 
					str2 = str1.toLowerCase(); 
					str3 = findText.getText(); 
					str4 = str3.toLowerCase(); 
					
					if(matchcase.isSelected()) { 
						strA = str1; 
						strB = str3; 
					} 
					else { 
						strA = str2; 
						strB = str4; 
					} 
					
					if(up.isSelected()){						
						if(editArea.getSelectedText()==null){							
							a = strA.lastIndexOf(strB, FindStartPos-1);
						}
						else
						{
							a = strA.lastIndexOf(strB, FindStartPos-findText.getText().length()-1);	
						}
					}
					else if(down.isSelected())
						{
							if(editArea.getSelectedText()==null){
							a = strA.indexOf(strB, FindStartPos);
							}
							else
							{
							a=strA.indexOf(strB,FindStartPos-findText.getText().length()+1);
							}
							
					}
					
					if(a > -1) { 
						if(up.isSelected()){
							editArea.setCaretPosition(a);
							b = findText.getText().length(); 
							editArea.select(a, a + b); 
							}
						else if(down.isSelected()){
							editArea.setCaretPosition(a); 
							b = findText.getText().length(); 
							editArea.select(a, a + b);
						}
					}			 
					else { 
						if(replaceCount==0){
							JOptionPane.showMessageDialog(findDialog, "找不到您查找的内容!", "记事本",JOptionPane.INFORMATION_MESSAGE); 
						}
						else
						{
							JOptionPane.showMessageDialog(findDialog,"成功替换"+replaceCount+"个匹配内容!","替换成功",JOptionPane.INFORMATION_MESSAGE);
						}
					} 
					
					if(replaceText.getText().length() == 0 && editArea.getSelectedText() != null){
						editArea.replaceSelection("");
						replaceCount++;
					} 
					

⌨️ 快捷键说明

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