java实现记事本之Java记事本源码及实现

今天给大家介绍一下关于如何用Java实现记事本功能,是学习Java swing的一个非常好的案例,下面先看一下运行结果(下载地址在最下面):

下面我们来看源码:

 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 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("Java记事本");
		//改变系统默认字体
		Font font = new Font("Dialog", Font.PLAIN, 12);
		java.util.Enumeration keys = UIManager.getDefaults().keys();
		while (keys.hasMoreElements()) {
			Object key = keys.nextElement();
			Object value = UIManager.get(key);
			if (value instanceof javax.swing.plaf.FontUIResource) {
				UIManager.put(key, font);
			}
		}
		//创建菜单条
		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,即会"自动换行"
		//this.add(editArea,BorderLayout.CENTER);//向窗口添加文本编辑区
		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);
			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 exitWindowChoose()
	{	editArea.requestFocus();
		String currentValue=editArea.getText();
		if(currentValue.equals(oldValue)==true)
		{	System.exit(0);
		}
		else
		{	int exitChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","退出提示",JOptionPane.YES_NO_CANCEL_OPTION);
			if(exitChoose==JOptionPane.YES_OPTION)
			{	//boolean isSave=false;
				if(isNewFile)
				{
					String str=null;
					JFileChooser fileChooser=new JFileChooser();
					fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
					fileChooser.setApproveButtonText("确定");
					fileChooser.setDialogTitle("另存为");

					int result=fileChooser.showSaveDialog(this);

					if(result==JFileChooser.CANCEL_OPTION)
					{	statusLabel.setText(" 您没有保存文件");
						return;
					}					

					File saveFileName=fileChooser.getSelectedFile();

					if(saveFileName==null||saveFileName.getName().equals(""))
					{	JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);
					}
					else
					{	try
						{	FileWriter fw=new FileWriter(saveFileName);
							BufferedWriter bfw=new BufferedWriter(fw);
							bfw.write(editArea.getText(),0,editArea.getText().length());
							bfw.flush();
							fw.close();

							isNewFile=false;
							currentFile=saveFileName;
							oldValue=editArea.getText();

							this.setTitle(saveFileName.getName()+"  - 记事本");
							statusLabel.setText(" 当前打开文件:"+saveFileName.getAbsoluteFile());
							//isSave=true;
						}
						catch(IOException ioException){
						}
					}
				}
				else
				{
					try
					{	FileWriter fw=new FileWriter(currentFile);
						BufferedWriter bfw=new BufferedWriter(fw);
						bfw.write(editArea.getText(),0,editArea.getText().length());
						bfw.flush();
						fw.close();
						//isSave=true;
					}
					catch(IOException ioException){
					}
				}
				System.exit(0);
				//if(isSave)System.exit(0);
				//else return;
			}
			else if(exitChoose==JOptionPane.NO_OPTION)
			{	System.exit(0);
			}
			else
			{	return;
			}
		}
	}//关闭窗口时调用方法结束

	//查找方法
	public void find()
	{	final JDialog findDialog=new JDialog(this,"查找",false);//false时允许其他窗口同时处于激活状态(即无模式)
		Container con=findDialog.getContentPane();//返回此对话框的contentPane对象
		con.setLayout(new FlowLayout(FlowLayout.LEFT));
		JLabel findContentLabel=new JLabel("查找内容(N):");
		final JTextField findText=new JTextField(15);
		JButton findNextButton=new JButton("查找下一个(F):");
		final JCheckBox matchCheckBox=new JCheckBox("区分大小写(C)");
		ButtonGroup bGroup=new ButtonGroup();
		final JRadioButton upButton=new JRadioButton("向上(U)");
		final JRadioButton downButton=new JRadioButton("向下(U)");
		downButton.setSelected(true);
		bGroup.add(upButton);
		bGroup.add(downButton);
		/*ButtonGroup此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。
		使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。*/
		/*JRadioButton此类实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。
		与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。
		(创建一个 ButtonGroup 对象并用其 add 方法将 JRadioButton 对象包含在此组中。)*/
		JButton cancel=new JButton("取消");
		//取消按钮事件处理
		cancel.addActionListener(new ActionListener()
		{	public void actionPerformed(ActionEvent e)
			{	findDialog.dispose();
			}
		});
		//"查找下一个"按钮监听
		findNextButton.addActionListener(new ActionListener()
		{	public void actionPerformed(ActionEvent e)
			{	//"区分大小写(C)"的JCheckBox是否被选中
				int k=0,m=0;
				final String str1,str2,str3,str4,strA,strB;
				str1=editArea.getText();
				str2=findText.getText();
				str3=str1.toUpperCase();
				str4=str2.toUpperCase();
				if(matchCheckBox.isSelected())//区分大小写
				{	strA=str1;
					strB=str2;
				}
				else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找
				{	strA=str3;
					strB=str4;
				}
				if(upButton.isSelected())
				{	//k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
					if(editArea.getSelectedText()==null)
						k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
					else
						k=strA.lastIndexOf(strB, editArea.getCaretPosition()-findText.getText().length()-1);
					if(k>-1)
					{	//String strData=strA.subString(k,strB.getText().length()+1);
						editArea.setCaretPosition(k);
						editArea.select(k,k+strB.length());
					}
					else
					{	JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
					}
				}
				else if(downButton.isSelected())
				{	if(editArea.getSelectedText()==null)
						k=strA.indexOf(strB,editArea.getCaretPosition()+1);
					else
						k=strA.indexOf(strB, editArea.getCaretPosition()-findText.getText().length()+1);
					if(k>-1)
					{	//String strData=strA.subString(k,strB.getText().length()+1);
						editArea.setCaretPosition(k);
						editArea.select(k,k+strB.length());
					}
					else
					{	JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
					}
				}
			}
		});//"查找下一个"按钮监听结束
		//创建"查找"对话框的界面
		JPanel panel1=new JPanel();
		JPanel panel2=new JPanel();
		JPanel panel3=new JPanel();
		JPanel directionPanel=new JPanel();
		directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
		//设置directionPanel组件的边框;
		//BorderFactory.createTitledBorder(String title)创建一个新标题边框,使用默认边框(浮雕化)、默认文本位置(位于顶线上)、默认调整 (leading) 以及由当前外观确定的默认字体和文本颜色,并指定了标题文本。
		directionPanel.add(upButton);
		directionPanel.add(downButton);
		panel1.setLayout(new GridLayout(2,1));
		panel1.add(findNextButton);
		panel1.add(cancel);
		panel2.add(findContentLabel);
		panel2.add(findText);
		panel2.add(panel1);
		panel3.add(matchCheckBox);
		panel3.add(directionPanel);
		con.add(panel2);
		con.add(panel3);
		findDialog.setSize(410,180);
		findDialog.setResizable(false);//不可调整大小
		findDialog.setLocation(230,280);
		findDialog.setVisible(true);
	}//查找方法结束

	//替换方法
	public void replace()
	{	final JDialog replaceDialog=new JDialog(this,"替换",false);//false时允许其他窗口同时处于激活状态(即无模式)
		Container con=replaceDialog.getContentPane();//返回此对话框的contentPane对象
		con.setLayout(new FlowLayout(FlowLayout.CENTER));
		JLabel findContentLabel=new JLabel("查找内容(N):");
		final JTextField findText=new JTextField(15);
		JButton findNextButton=new JButton("查找下一个(F):");
		JLabel replaceLabel=new JLabel("替换为(P):");
		final JTextField replaceText=new JTextField(15);
		JButton replaceButton=new JButton("替换(R)");
		JButton replaceAllButton=new JButton("全部替换(A)");
		JButton cancel=new JButton("取消");
		cancel.addActionListener(new ActionListener()
		{	public void actionPerformed(ActionEvent e)
			{	replaceDialog.dispose();
			}
		});
		final JCheckBox matchCheckBox=new JCheckBox("区分大小写(C)");
		ButtonGroup bGroup=new ButtonGroup();
		final JRadioButton upButton=new JRadioButton("向上(U)");
		final JRadioButton downButton=new JRadioButton("向下(U)");
		downButton.setSelected(true);
		bGroup.add(upButton);
		bGroup.add(downButton);
		/*ButtonGroup此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。
		使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。*/
		/*JRadioButton此类实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。
		与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。
		(创建一个 ButtonGroup 对象并用其 add 方法将 JRadioButton 对象包含在此组中。)*/

		//"查找下一个"按钮监听
		findNextButton.addActionListener(new ActionListener()
		{	public void actionPerformed(ActionEvent e)
			{	//"区分大小写(C)"的JCheckBox是否被选中
				int k=0,m=0;
				final String str1,str2,str3,str4,strA,strB;
				str1=editArea.getText();
				str2=findText.getText();
				str3=str1.toUpperCase();
				str4=str2.toUpperCase();
				if(matchCheckBox.isSelected())//区分大小写
				{	strA=str1;
					strB=str2;
				}
				else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找
				{	strA=str3;
					strB=str4;
				}
				if(upButton.isSelected())
				{	//k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
					if(editArea.getSelectedText()==null)
						k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
					else
						k=strA.lastIndexOf(strB, editArea.getCaretPosition()-findText.getText().length()-1);
					if(k>-1)
					{	//String strData=strA.subString(k,strB.getText().length()+1);
						editArea.setCaretPosition(k);
						editArea.select(k,k+strB.length());
					}
					else
					{	JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
					}
				}
				else if(downButton.isSelected())
				{	if(editArea.getSelectedText()==null)
						k=strA.indexOf(strB,editArea.getCaretPosition()+1);
					else
						k=strA.indexOf(strB, editArea.getCaretPosition()-findText.getText().length()+1);
					if(k>-1)
					{	//String strData=strA.subString(k,strB.getText().length()+1);
						editArea.setCaretPosition(k);
						editArea.select(k,k+strB.length());
					}
					else
					{	JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
					}
				}
			}
		});//"查找下一个"按钮监听结束

		//"替换"按钮监听
		replaceButton.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());
			}
		});//"替换"按钮监听结束

		//"全部替换"按钮监听
		replaceAllButton.addActionListener(new ActionListener()
		{	public void actionPerformed(ActionEvent e)
			{	editArea.setCaretPosition(0);	//将光标放到编辑区开头
				int k=0,m=0,replaceCount=0;
				if(findText.getText().length()==0)
				{	JOptionPane.showMessageDialog(replaceDialog,"请填写查找内容!","提示",JOptionPane.WARNING_MESSAGE);
					findText.requestFocus(true);
					return;
				}
				while(k>-1)//当文本中有内容被选中时(k>-1被选中)进行替换,否则不进行while循环
				{	//"区分大小写(C)"的JCheckBox是否被选中
					//int k=0,m=0;
					final String str1,str2,str3,str4,strA,strB;
					str1=editArea.getText();
					str2=findText.getText();
					str3=str1.toUpperCase();
					str4=str2.toUpperCase();
					if(matchCheckBox.isSelected())//区分大小写
					{	strA=str1;
						strB=str2;
					}
					else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找
					{	strA=str3;
						strB=str4;
					}
					if(upButton.isSelected())
					{	//k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
						if(editArea.getSelectedText()==null)
							k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
						else
							k=strA.lastIndexOf(strB, editArea.getCaretPosition()-findText.getText().length()-1);
						if(k>-1)
						{	//String strData=strA.subString(k,strB.getText().length()+1);
							editArea.setCaretPosition(k);
							editArea.select(k,k+strB.length());
						}
						else
						{	if(replaceCount==0)
							{	JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",JOptionPane.INFORMATION_MESSAGE);
							}
							else
							{	JOptionPane.showMessageDialog(replaceDialog,"成功替换"+replaceCount+"个匹配内容!","替换成功",JOptionPane.INFORMATION_MESSAGE);
							}
						}
					}
					else if(downButton.isSelected())
					{	if(editArea.getSelectedText()==null)
							k=strA.indexOf(strB,editArea.getCaretPosition()+1);
						else
							k=strA.indexOf(strB, editArea.getCaretPosition()-findText.getText().length()+1);
						if(k>-1)
						{	//String strData=strA.subString(k,strB.getText().length()+1);
							editArea.setCaretPosition(k);
							editArea.select(k,k+strB.length());
						}
						else
						{	if(replaceCount==0)
							{	JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",JOptionPane.INFORMATION_MESSAGE);
							}
							else
							{	JOptionPane.showMessageDialog(replaceDialog,"成功替换"+replaceCount+"个匹配内容!","替换成功",JOptionPane.INFORMATION_MESSAGE);
							}
						}
					}
					if(replaceText.getText().length()==0 && editArea.getSelectedText()!= null)
					{	editArea.replaceSelection("");
						replaceCount++;
					} 

					if(replaceText.getText().length()>0 && editArea.getSelectedText()!= null)
					{	editArea.replaceSelection(replaceText.getText());
						replaceCount++;
					}
				}//while循环结束
			}
		});//"替换全部"方法结束

		//创建"替换"对话框的界面
		JPanel directionPanel=new JPanel();
		directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
		//设置directionPanel组件的边框;
		//BorderFactory.createTitledBorder(String title)创建一个新标题边框,使用默认边框(浮雕化)、默认文本位置(位于顶线上)、默认调整 (leading) 以及由当前外观确定的默认字体和文本颜色,并指定了标题文本。
		directionPanel.add(upButton);
		directionPanel.add(downButton);
		JPanel panel1=new JPanel();
		JPanel panel2=new JPanel();
		JPanel panel3=new JPanel();
		JPanel panel4=new JPanel();
		panel4.setLayout(new GridLayout(2,1));
		panel1.add(findContentLabel);
		panel1.add(findText);
		panel1.add(findNextButton);
		panel4.add(replaceButton);
		panel4.add(replaceAllButton);
		panel2.add(replaceLabel);
		panel2.add(replaceText);
		panel2.add(panel4);
		panel3.add(matchCheckBox);
		panel3.add(directionPanel);
		panel3.add(cancel);
		con.add(panel1);
		con.add(panel2);
		con.add(panel3);
		replaceDialog.setSize(420,220);
		replaceDialog.setResizable(false);//不可调整大小
		replaceDialog.setLocation(230,280);
		replaceDialog.setVisible(true);
	}//"全部替换"按钮监听结束

	//"字体"方法
	public void font()
	{	final JDialog fontDialog=new JDialog(this,"字体设置",false);
		Container con=fontDialog.getContentPane();
		con.setLayout(new FlowLayout(FlowLayout.LEFT));
		JLabel fontLabel=new JLabel("字体(F):");
		fontLabel.setPreferredSize(new Dimension(100,20));//构造一个Dimension,并将其初始化为指定宽度和高度
		JLabel styleLabel=new JLabel("字形(Y):");
		styleLabel.setPreferredSize(new Dimension(100,20));
		JLabel sizeLabel=new JLabel("大小(S):");
		sizeLabel.setPreferredSize(new Dimension(100,20));
		final JLabel sample=new JLabel("张选仲的记事本-ZXZ's Notepad");
		//sample.setHorizontalAlignment(SwingConstants.CENTER);
		final JTextField fontText=new JTextField(9);
		fontText.setPreferredSize(new Dimension(200,20));
		final JTextField styleText=new JTextField(8);
		styleText.setPreferredSize(new Dimension(200,20));
		final int style[]={Font.PLAIN,Font.BOLD,Font.ITALIC,Font.BOLD+Font.ITALIC};
		final JTextField sizeText=new JTextField(5);
		sizeText.setPreferredSize(new Dimension(200,20));
		JButton okButton=new JButton("确定");
		JButton cancel=new JButton("取消");
		cancel.addActionListener(new ActionListener()
		{	public void actionPerformed(ActionEvent e)
			{	fontDialog.dispose();
			}
		});
		Font currentFont=editArea.getFont();
		fontText.setText(currentFont.getFontName());
		fontText.selectAll();
		//styleText.setText(currentFont.getStyle());
		//styleText.selectAll();
		if(currentFont.getStyle()==Font.PLAIN)
			styleText.setText("常规");
		else if(currentFont.getStyle()==Font.BOLD)
			styleText.setText("粗体");
		else if(currentFont.getStyle()==Font.ITALIC)
			styleText.setText("斜体");
		else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))
			styleText.setText("粗斜体");
		styleText.selectAll();
		String str=String.valueOf(currentFont.getSize());
		sizeText.setText(str);
		sizeText.selectAll();
		final JList fontList,styleList,sizeList;
		GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
		final String fontName[]=ge.getAvailableFontFamilyNames();
		fontList=new JList(fontName);
		fontList.setFixedCellWidth(86);
		fontList.setFixedCellHeight(20);
		fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		final String fontStyle[]={"常规","粗体","斜体","粗斜体"};
		styleList=new JList(fontStyle);
		styleList.setFixedCellWidth(86);
		styleList.setFixedCellHeight(20);
		styleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		if(currentFont.getStyle()==Font.PLAIN)
			styleList.setSelectedIndex(0);
		else if(currentFont.getStyle()==Font.BOLD)
			styleList.setSelectedIndex(1);
		else if(currentFont.getStyle()==Font.ITALIC)
			styleList.setSelectedIndex(2);
		else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))
			styleList.setSelectedIndex(3);
		final String fontSize[]={"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"};
		sizeList=new JList(fontSize);
		sizeList.setFixedCellWidth(43);
		sizeList.setFixedCellHeight(20);
		sizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		fontList.addListSelectionListener(new ListSelectionListener()
		{	public void valueChanged(ListSelectionEvent event)
			{	fontText.setText(fontName[fontList.getSelectedIndex()]);
				fontText.selectAll();
				Font sampleFont1=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
				sample.setFont(sampleFont1);
			}
		});
		styleList.addListSelectionListener(new ListSelectionListener()
		{	public void valueChanged(ListSelectionEvent event)
			{	int s=style[styleList.getSelectedIndex()];
				styleText.setText(fontStyle[s]);
				styleText.selectAll();
				Font sampleFont2=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
				sample.setFont(sampleFont2);
			}
		});
		sizeList.addListSelectionListener(new ListSelectionListener()
		{	public void valueChanged(ListSelectionEvent event)
			{	sizeText.setText(fontSize[sizeList.getSelectedIndex()]);
				//sizeText.requestFocus();
				sizeText.selectAll();
				Font sampleFont3=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
				sample.setFont(sampleFont3);
			}
		});
		okButton.addActionListener(new ActionListener()
		{	public void actionPerformed(ActionEvent e)
			{	Font okFont=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
				editArea.setFont(okFont);
				fontDialog.dispose();
			}
		});
		JPanel samplePanel=new JPanel();
		samplePanel.setBorder(BorderFactory.createTitledBorder("示例"));
		//samplePanel.setLayout(new FlowLayout(FlowLayout.CENTER));
		samplePanel.add(sample);
		JPanel panel1=new JPanel();
		JPanel panel2=new JPanel();
		JPanel panel3=new JPanel();
		//JPanel panel4=new JPanel();
		//JPanel panel5=new JPanel();
		//panel1.add(fontLabel);
		//panel1.add(styleLabel);
		//panel1.add(sizeLabel);
		//panel2.add(fontText);
		//panel2.add(new JScrollPane(fontList));//JList不支持直接滚动,所以要让JList作为JScrollPane的视口视图
		//panel2.setLayout(new GridLayout(2,1));
		//panel3.add(styleText);
		//panel3.add(new JScrollPane(styleList));
		//panel3.setLayout(new GridLayout(2,1));
		//panel4.add(sizeText);
		//panel4.add(new JScrollPane(sizeText));
		//panel4.setLayout(new GridLayout(2,1));
		//panel5.add(okButton);
		//panel5.add(cancel);
		//con.add(panel1);
		//con.add(panel2);
		//con.add(panel3);
		//con.add(panel4);
		//con.add(panel5);
		panel2.add(fontText);
		panel2.add(styleText);
		panel2.add(sizeText);
		panel2.add(okButton);
		panel3.add(new JScrollPane(fontList));//JList不支持直接滚动,所以要让JList作为JScrollPane的视口视图
		panel3.add(new JScrollPane(styleList));
		panel3.add(new JScrollPane(sizeList));
		panel3.add(cancel);
		con.add(panel1);
		con.add(panel2);
		con.add(panel3);
		con.add(samplePanel);
		fontDialog.setSize(350,340);
		fontDialog.setLocation(200,200);
		fontDialog.setResizable(false);
		fontDialog.setVisible(true);
	}

	//public void menuPerformed(MenuEvent e)
	//{	checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性
	//}

	public void actionPerformed(ActionEvent e)
	{	//新建
		if(e.getSource()==fileMenu_New)
		{	editArea.requestFocus();
			String currentValue=editArea.getText();
			boolean isTextChange=(currentValue.equals(oldValue))?false:true;
			if(isTextChange)
			{	int saveChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","提示",JOptionPane.YES_NO_CANCEL_OPTION);
				if(saveChoose==JOptionPane.YES_OPTION)
				{	String str=null;
					JFileChooser fileChooser=new JFileChooser();
					fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
					//fileChooser.setApproveButtonText("确定");
					fileChooser.setDialogTitle("另存为");
					int result=fileChooser.showSaveDialog(this);
					if(result==JFileChooser.CANCEL_OPTION)
					{	statusLabel.setText("您没有选择任何文件");
						return;
					}
					File saveFileName=fileChooser.getSelectedFile();
					if(saveFileName==null || saveFileName.getName().equals(""))
					{	JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);
					}
					else
					{	try
						{	FileWriter fw=new FileWriter(saveFileName);
							BufferedWriter bfw=new BufferedWriter(fw);
							bfw.write(editArea.getText(),0,editArea.getText().length());
							bfw.flush();//刷新该流的缓冲
							bfw.close();
							isNewFile=false;
							currentFile=saveFileName;
							oldValue=editArea.getText();
							this.setTitle(saveFileName.getName()+" - 记事本");
							statusLabel.setText("当前打开文件:"+saveFileName.getAbsoluteFile());
						}
						catch (IOException ioException)
						{
						}
					}
				}
				else if(saveChoose==JOptionPane.NO_OPTION)
				{	editArea.replaceRange("",0,editArea.getText().length());
					statusLabel.setText(" 新建文件");
					this.setTitle("无标题 - 记事本");
					isNewFile=true;
					undo.discardAllEdits();	//撤消所有的"撤消"操作
					editMenu_Undo.setEnabled(false);
					oldValue=editArea.getText();
				}
				else if(saveChoose==JOptionPane.CANCEL_OPTION)
				{	return;
				}
			}
			else
			{	editArea.replaceRange("",0,editArea.getText().length());
				statusLabel.setText(" 新建文件");
				this.setTitle("无标题 - 记事本");
				isNewFile=true;
				undo.discardAllEdits();//撤消所有的"撤消"操作
				editMenu_Undo.setEnabled(false);
				oldValue=editArea.getText();
			}
		}//新建结束
		//打开
		else if(e.getSource()==fileMenu_Open)
		{	editArea.requestFocus();
			String currentValue=editArea.getText();
			boolean isTextChange=(currentValue.equals(oldValue))?false:true;
			if(isTextChange)
			{	int saveChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","提示",JOptionPane.YES_NO_CANCEL_OPTION);
				if(saveChoose==JOptionPane.YES_OPTION)
				{	String str=null;
					JFileChooser fileChooser=new JFileChooser();
					fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
					//fileChooser.setApproveButtonText("确定");
					fileChooser.setDialogTitle("另存为");
					int result=fileChooser.showSaveDialog(this);
					if(result==JFileChooser.CANCEL_OPTION)
					{	statusLabel.setText("您没有选择任何文件");
						return;
					}
					File saveFileName=fileChooser.getSelectedFile();
					if(saveFileName==null || saveFileName.getName().equals(""))
					{	JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);
					}
					else
					{	try
						{	FileWriter fw=new FileWriter(saveFileName);
							BufferedWriter bfw=new BufferedWriter(fw);
							bfw.write(editArea.getText(),0,editArea.getText().length());
							bfw.flush();//刷新该流的缓冲
							bfw.close();
							isNewFile=false;
							currentFile=saveFileName;
							oldValue=editArea.getText();
							this.setTitle(saveFileName.getName()+" - 记事本");
							statusLabel.setText("当前打开文件:"+saveFileName.getAbsoluteFile());
						}
						catch (IOException ioException)
						{
						}
					}
				}
				else if(saveChoose==JOptionPane.NO_OPTION)
				{	String str=null;
					JFileChooser fileChooser=new JFileChooser();
					fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
					//fileChooser.setApproveButtonText("确定");
					fileChooser.setDialogTitle("打开文件");
					int result=fileChooser.showOpenDialog(this);
					if(result==JFileChooser.CANCEL_OPTION)
					{	statusLabel.setText("您没有选择任何文件");
						return;
					}
					File fileName=fileChooser.getSelectedFile();
					if(fileName==null || fileName.getName().equals(""))
					{	JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);
					}
					else
					{	try
						{	FileReader fr=new FileReader(fileName);
							BufferedReader bfr=new BufferedReader(fr);
							editArea.setText("");
							while((str=bfr.readLine())!=null)
							{	editArea.append(str);
							}
							this.setTitle(fileName.getName()+" - 记事本");
							statusLabel.setText(" 当前打开文件:"+fileName.getAbsoluteFile());
							fr.close();
							isNewFile=false;
							currentFile=fileName;
							oldValue=editArea.getText();
						}
						catch (IOException ioException)
						{
						}
					}
				}
				else
				{	return;
				}
			}
			else
			{	String str=null;
				JFileChooser fileChooser=new JFileChooser();
				fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
				//fileChooser.setApproveButtonText("确定");
				fileChooser.setDialogTitle("打开文件");
				int result=fileChooser.showOpenDialog(this);
				if(result==JFileChooser.CANCEL_OPTION)
				{	statusLabel.setText(" 您没有选择任何文件 ");
					return;
				}
				File fileName=fileChooser.getSelectedFile();
				if(fileName==null || fileName.getName().equals(""))
				{	JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);
				}
				else
				{	try
					{	FileReader fr=new FileReader(fileName);
						BufferedReader bfr=new BufferedReader(fr);
						editArea.setText("");
						while((str=bfr.readLine())!=null)
						{	editArea.append(str);
						}
						this.setTitle(fileName.getName()+" - 记事本");
						statusLabel.setText(" 当前打开文件:"+fileName.getAbsoluteFile());
						fr.close();
						isNewFile=false;
						currentFile=fileName;
						oldValue=editArea.getText();
					}
					catch (IOException ioException)
					{
					}
				}
			}
		}//打开结束
		//保存
		else if(e.getSource()==fileMenu_Save)
		{	editArea.requestFocus();
			if(isNewFile)
			{	String str=null;
				JFileChooser fileChooser=new JFileChooser();
				fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
				//fileChooser.setApproveButtonText("确定");
				fileChooser.setDialogTitle("保存");
				int result=fileChooser.showSaveDialog(this);
				if(result==JFileChooser.CANCEL_OPTION)
				{	statusLabel.setText("您没有选择任何文件");
					return;
				}
				File saveFileName=fileChooser.getSelectedFile();
				if(saveFileName==null || saveFileName.getName().equals(""))
				{	JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);
				}
				else
				{	try
					{	FileWriter fw=new FileWriter(saveFileName);
						BufferedWriter bfw=new BufferedWriter(fw);
						bfw.write(editArea.getText(),0,editArea.getText().length());
						bfw.flush();//刷新该流的缓冲
						bfw.close();
						isNewFile=false;
						currentFile=saveFileName;
						oldValue=editArea.getText();
						this.setTitle(saveFileName.getName()+" - 记事本");
						statusLabel.setText("当前打开文件:"+saveFileName.getAbsoluteFile());
					}
					catch (IOException ioException)
					{
					}
				}
			}
			else
			{	try
				{	FileWriter fw=new FileWriter(currentFile);
					BufferedWriter bfw=new BufferedWriter(fw);
					bfw.write(editArea.getText(),0,editArea.getText().length());
					bfw.flush();
					fw.close();
				}
				catch(IOException ioException)
				{
				}
			}
		}//保存结束
		//另存为
		else if(e.getSource()==fileMenu_SaveAs)
		{	editArea.requestFocus();
			String str=null;
			JFileChooser fileChooser=new JFileChooser();
			fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
			//fileChooser.setApproveButtonText("确定");
			fileChooser.setDialogTitle("另存为");
			int result=fileChooser.showSaveDialog(this);
			if(result==JFileChooser.CANCEL_OPTION)
			{	statusLabel.setText(" 您没有选择任何文件");
				return;
			}
			File saveFileName=fileChooser.getSelectedFile();
			if(saveFileName==null||saveFileName.getName().equals(""))
			{	JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);
			}
			else
			{	try
				{	FileWriter fw=new FileWriter(saveFileName);
					BufferedWriter bfw=new BufferedWriter(fw);
					bfw.write(editArea.getText(),0,editArea.getText().length());
					bfw.flush();
					fw.close();
					oldValue=editArea.getText();
					this.setTitle(saveFileName.getName()+"  - 记事本");
					statusLabel.setText(" 当前打开文件:"+saveFileName.getAbsoluteFile());
				}
				catch(IOException ioException)
				{
				}
			}
		}//另存为结束
		//页面设置
		else if(e.getSource()==fileMenu_PageSetUp)
		{	editArea.requestFocus();
			JOptionPane.showMessageDialog(this,"对不起,此功能尚未实现!更多请看http://pan.muyi.so","提示",JOptionPane.WARNING_MESSAGE);
		}//页面设置结束
		//打印
		else if(e.getSource()==fileMenu_Print)
		{	editArea.requestFocus();
			JOptionPane.showMessageDialog(this,"对不起,此功能尚未实现!更多请看http://pan.muyi.so","提示",JOptionPane.WARNING_MESSAGE);
		}//打印结束
		//退出
		else if(e.getSource()==fileMenu_Exit)
		{	int exitChoose=JOptionPane.showConfirmDialog(this,"确定要退出吗?","退出提示",JOptionPane.OK_CANCEL_OPTION);
			if(exitChoose==JOptionPane.OK_OPTION)
			{	System.exit(0);
			}
			else
			{	return;
			}
		}//退出结束
		//编辑
		//else if(e.getSource()==editMenu)
		//{	checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性
		//}
		//编辑结束
		//撤销
		else if(e.getSource()==editMenu_Undo || e.getSource()==popupMenu_Undo)
		{	editArea.requestFocus();
			if(undo.canUndo())
			{	try
				{	undo.undo();
				}
				catch (CannotUndoException ex)
				{	System.out.println("Unable to undo:" + ex);
					//ex.printStackTrace();
				}
			}
			if(!undo.canUndo())
				{	editMenu_Undo.setEnabled(false);
				}
		}//撤销结束
		//剪切
		else if(e.getSource()==editMenu_Cut || e.getSource()==popupMenu_Cut)
		{	editArea.requestFocus();
			String text=editArea.getSelectedText();
			StringSelection selection=new StringSelection(text);
			clipBoard.setContents(selection,null);
			editArea.replaceRange("",editArea.getSelectionStart(),editArea.getSelectionEnd());
			checkMenuItemEnabled();//设置剪切,复制,粘帖,删除功能的可用性
		}//剪切结束
		//复制
		else if(e.getSource()==editMenu_Copy || e.getSource()==popupMenu_Copy)
		{	editArea.requestFocus();
			String text=editArea.getSelectedText();
			StringSelection selection=new StringSelection(text);
			clipBoard.setContents(selection,null);
			checkMenuItemEnabled();//设置剪切,复制,粘帖,删除功能的可用性
		}//复制结束
		//粘帖
		else if(e.getSource()==editMenu_Paste || e.getSource()==popupMenu_Paste)
		{	editArea.requestFocus();
			Transferable contents=clipBoard.getContents(this);
			if(contents==null)return;
			String text="";
			try
			{	text=(String)contents.getTransferData(DataFlavor.stringFlavor);
			}
			catch (Exception exception)
			{
			}
			editArea.replaceRange(text,editArea.getSelectionStart(),editArea.getSelectionEnd());
			checkMenuItemEnabled();
		}//粘帖结束
		//删除
		else if(e.getSource()==editMenu_Delete || e.getSource()==popupMenu_Delete)
		{	editArea.requestFocus();
			editArea.replaceRange("",editArea.getSelectionStart(),editArea.getSelectionEnd());
			checkMenuItemEnabled();	//设置剪切、复制、粘贴、删除等功能的可用性
		}//删除结束
		//查找
		else if(e.getSource()==editMenu_Find)
		{	editArea.requestFocus();
			find();
		}//查找结束
		//查找下一个
		else if(e.getSource()==editMenu_FindNext)
		{	editArea.requestFocus();
			find();
		}//查找下一个结束
		//替换
		else if(e.getSource()==editMenu_Replace)
		{	editArea.requestFocus();
			replace();
		}//替换结束
		//转到
		else if(e.getSource()==editMenu_GoTo)
		{	editArea.requestFocus();
			JOptionPane.showMessageDialog(this,"对不起,此功能尚未实现!更多请看http://pan.muyi.so","提示",JOptionPane.WARNING_MESSAGE);
		}//转到结束
		//时间日期
		else if(e.getSource()==editMenu_TimeDate)
		{	editArea.requestFocus();
			//SimpleDateFormat currentDateTime=new SimpleDateFormat("HH:mmyyyy-MM-dd");
			//editArea.insert(currentDateTime.format(new Date()),editArea.getCaretPosition());
			Calendar rightNow=Calendar.getInstance();
			Date date=rightNow.getTime();
			editArea.insert(date.toString(),editArea.getCaretPosition());
		}//时间日期结束
		//全选
		else if(e.getSource()==editMenu_SelectAll || e.getSource()==popupMenu_SelectAll)
		{	editArea.selectAll();
		}//全选结束
		//自动换行(已在前面设置)
		else if(e.getSource()==formatMenu_LineWrap)
		{	if(formatMenu_LineWrap.getState())
				editArea.setLineWrap(true);
			else
				editArea.setLineWrap(false);

		}//自动换行结束
		//字体设置
		else if(e.getSource()==formatMenu_Font)
		{	editArea.requestFocus();
			font();
		}//字体设置结束
		//设置状态栏可见性
		else if(e.getSource()==viewMenu_Status)
		{	if(viewMenu_Status.getState())
				statusLabel.setVisible(true);
			else
				statusLabel.setVisible(false);
		}//设置状态栏可见性结束
		//帮助主题
		else if(e.getSource()==helpMenu_HelpTopics)
		{	editArea.requestFocus();
			JOptionPane.showMessageDialog(this,"路漫漫其修远兮,吾将上下而求索。","帮助主题",JOptionPane.INFORMATION_MESSAGE);
		}//帮助主题结束
		//关于
		else if(e.getSource()==helpMenu_AboutNotepad)
		{	editArea.requestFocus();
			JOptionPane.showMessageDialog(this,
				"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n"+
				" 编写者:沐伊科技 \n"+
				" 编写时间:2016-06-09                          \n"+
				" 更多教程:http://pan.muyi.so (网盘资源教程应有尽有哦!)     \n"+
				" e-mail:[email protected]                \n"+
				" 一些地方借鉴他人,不足之处希望大家能提出意见,谢谢!  \n"+
				"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n",
				"记事本",JOptionPane.INFORMATION_MESSAGE);
		}//关于结束
	}//方法actionPerformed()结束

	//实现DocumentListener接口中的方法(与撤销操作有关)
	public void removeUpdate(DocumentEvent e)
	{	editMenu_Undo.setEnabled(true);
	}
	public void insertUpdate(DocumentEvent e)
	{	editMenu_Undo.setEnabled(true);
	}
	public void changedUpdate(DocumentEvent e)
	{	editMenu_Undo.setEnabled(true);
	}//DocumentListener结束

	//实现接口UndoableEditListener的类UndoHandler(与撤销操作有关)
	class UndoHandler implements UndoableEditListener
	{	public void undoableEditHappened(UndoableEditEvent uee)
		{	undo.addEdit(uee.getEdit());
		}
	}

	//main函数开始
	public static void main(String args[])
	{	Notepad notepad=new Notepad();
		notepad.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//使用 System exit 方法退出应用程序
	}//main函数结束
}

下载地址:点击下载

更多资源请点击网盘搜索沐伊神器进行查看

时间: 2024-09-30 19:05:59

java实现记事本之Java记事本源码及实现的相关文章

iOS 记事本源码,有需要的可以下载

iOS记事本源码,第一次提交到gitHub,有需要可以下载,(大神勿喷)记得给一颗star,谢谢 https://github.com/baishiyun/BSYFancybox

简单记事本程序java源码项目

代码如下 import java.awt.*; import java.io.*; import java.awt.datatransfer.*; import java.awt.event.*; public class Main extends Frame implements ActionListener { private static final long serialVersionUID = 1L; TextArea textArea = new TextArea(); MenuBa

编写运行最简单的java程序——使用记事本编写java程序

第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. 连接地址:http://www.cnblogs.com/hysum/p/7084380.html 现在我们可以通过使用记事本来编辑我们的第一个java小程序. 第一步 .使用记事本编辑程序代码 用记事本编写的是java的源代码文件,里面的代码就是我们平时学习的java代码.生成的文件后缀是.java

慕课网-安卓工程师初养成-1-3 使用记事本编写Java程序

step1: myProgram.java    源文件       使用记事本编辑 step2: compiler               编译器        使用javac命令 生成 myProgram.class   字节码文件 step3. interpreter           解释器         使用java命令 解释运行程序 例子: 在某个路径新增文本文件,然后重命名为HelloWorld.java,例如:E:\android\code\HelloWorld.java

【Java】【Fulme】Flume-NG源码阅读之SpoolDirectorySource

org.apache.flume.source.SpoolDirectorySource是flume的一个常用的source,这个源支持从磁盘中某文件夹获取文件数据.不同于其他异步源,这个源能够避免重启或者发送失败后数据丢失.flume可以监控文件夹,当出现新文件时会读取该文件并获取数据.当一个给定的文件被全部读入到通道中时,该文件会被重命名以标志已经完成.同时,该源需要一个清理进程来定期移除完成的文件. 通道可选地将一个完成路径的原始文件插入到每个事件的hearder域中.在读取文件时,sou

【Java】【Flume】Flume-NG源码阅读之AvroSink

org.apache.flume.sink.AvroSink是用来通过网络来传输数据的,可以将event发送到RPC服务器(比如AvroSource),使用AvroSink和AvroSource可以组成分层结构.它继承自AbstractRpcSink  extends AbstractSink implements Configurable这跟其他的sink一样都得extends AbstractSink implements Configurable,所以重点也在confgure.start.

Java开发记事本(未完待续)

右键菜单图 打印图 设置背景颜色.字体样式.字体颜色图 主要 package com.sxt.nodepad.view; import java.awt.BorderLayout; public class NotepadMainFrame extends JFrame implements ActionListener{ /** * 序列号 */ private static final long serialVersionUID = 8585210209467333480L; private

Java生成带logo 的二维码

这个工具类主要实现了两点功能: 1. 生成任意文链接的二维码. 2. 在二维码的中间加入图像. 主要实现步骤: 第一步: 导入QR二维码3.0 版本的core包和一张jpg图片(logo). core包下载地址:http://central.maven.org/maven2/com/google/zxing/core/3.0.0/ 第二步: 新建一个Java project.将刚下载的core-3.0.0 jar 添加到项目依赖中. 具体步骤: 第三步: 新建两个类,分别是: BufferedI

UEditor之基于Java图片上传前后端源码研究

开心一笑 一定要快乐学习,所以学习之前先看个笑话: 刚来北京,租了一个小房,一楼,上淘宝买衣服,选了付钱了联系卖家:"我已付款,请发货."谁知那货直接说:"我看到你地址了,自己上楼来拿吧!我就在你楼上." 拿你妹,老子付了邮费的...送下来. 提出问题 Ueditor前后端源码的学习和简单的研究??? 解决问题 前提: 假如你已经看了我的前一篇文章,这一点很重要的啊,当然不看也可以,因为你已经是一个高手,就像我一样,哈哈: 假如你已经安装tomcat服务器: 假如你