Java 记事本程序介绍

记事本程序展示结果图:



1.建立了一个类Notepad  extends JFrame  implements ActionListener , DocumentListener.

DocumentListener

interface for an observe to register to receive a notifications(n. 通知) of changes to a text document.

收到一个文本文档更改的通知的接口。

asynchronous mutations 异步的突变(变化)

程序设置是从上到下的编写实现。

(1) JMenu filename,。。。。; 定义好主菜单栏的名字。

(2)JPopupMenu 此处是定义右击弹出式菜单。 本意是一个弹出式菜单,当用户选择一个项目是,可以设置;也可以是 the user right-clicks(pull-right 右拉式) in a specified area.(在指定的区域进行右击式弹出菜单)  

separator n .分隔符(分隔线)

并定义了相关的JMenuItem 菜单项,即文件下的“新建”,“打开”这就叫做菜单项。

此处设置了与右击弹出菜单相关的JMenuItem。

A menu item is essentially (本质上)a button sitting in a list. When the user selects the "button", the action associated with the menu  item is performed。

(3)定义好菜单栏中各个菜单的JMenuItem(菜单项)。

其中格式和查看还要设置JCheckBoxMenuItem(复选菜单项 -复选框的功能)。如下所示:

□自动换行(复选框 在前面方格 可以选择或者取消选择)


(4)定义文本编辑区域JTextArea .

(5)定义JLable 状态栏标签


(6)设置系统粘贴板

Toolkit toolkit=Toolkit.getDefaultToolkit();

Clipboard clipBoard=toolkit.getSystemClipboard();

toolkit 是工具包,此类是 Abstract Window Toolkit 的所有实际实现的抽象超类。Toolkit 的子类被用于将各种组件绑定到特定本机工具包实现。

Toolkit是抽象类,所以不能用new Toolkit()实例化对象。

但是Toolkit有静态方法getDefaultToolkit(),通过这个方法可以获取到Toolkit的对象。

Clipboard 类

A class that implements a mechanism(机制;原理) to transfer data using cut/copy/paste operations.

使用剪切/复制/粘贴操作实现传输数据的机制的类。

(7)创建撤销操作管理器(与撤销操作有关)

protected UndoManager undo=new UndoManager();

protected UndoableEditListener undoHandler=new UndoHandler();

UndoManager类

UndoManagermanages a list ofUndoableEdits, providing a way to undo or redo the appropriate edits. There are two ways to add edits to anUndoManager. Add the edit directly using theaddEditmethod, or add theUndoManagerto a bean that supportsUndoableEditListener。

(8)其他变量

String oldValue;//存放编辑区原来的内容,用于比较文本是否有改动

boolean isNewFile=true;//是否新文件(未保存过的)

File currentFile;//当前文件名

(9)设置构造函数()-Notepad()-改变文本框的标题和改变系统默认的字体

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);

}

}

(10)创建菜单条MenuBar

JMenuBar menuBar=new JMenuBar();

(11)创建各个菜单项下的子菜单并注册事件监听器

fileMenu=new JMenu("文件(F)");

fileMenu.setMnemonic('F');//设置快捷键ALT+F 相当于“新建(N)”括号后的“(N)”。

fileMenu_New=new JMenuItem("新建(N)");

fileMenu_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));

fileMenu_New.addActionListener(this); //注册事件监听

其他的子菜单项一样设置,就是换个名字。

设置快捷键,实例化变量.setMnemonic('快捷键的字母').

加子菜单项用JMenuItem.

setAccelerator相当于“新建(N)“” 后的”Ctrl-N”



(11)创建编辑菜单及菜单项并注册事件监听

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);

(12)把这些菜单项添加到菜单条上add(变量名字)。层层添加,主菜单项添加到菜单条上,子菜单项添加到主菜单项上。

//向菜单条添加"文件"菜单及菜单项

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);

(13)创建文本编辑区并添加滚动条

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);

(14)创建右键弹出菜单

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);

(15)文本编辑区注册右键菜单事件

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();//编辑区获取焦点

}

});//文本编辑区注册右键菜单事件结束

(16)//创建和添加状态栏

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结束

(17)//设置菜单项的可用性:剪切,复制,粘帖,删除功能

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()结束

(18)//关闭窗口时调用

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;

}

}

}//关闭窗口时调用方法结束

JOptionPane(对话框)

showConfirmDialog:Asks a confirming question, like yes/no/cancel.

int exitChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","退出提示",JOptionPane.YES_NO_CANCEL_OPTION);


图中的退出提示就是JOptionPane.showConfirmDialog的用法展示。

JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE。

showMessageDialog :Tell the user about something that has happened.

JFileChooser(文件选择对话框)

JFileChooserprovides a simple mechanism(机制;原理) for the user to choose a file.

弹出一个对话框选择文件。


图中的中间的“打开文件这样的文件选择框”。

(19)子菜单项“查找”“替换”“全部替换”“字体”的设置方法和事件处理

//查找方法

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();

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);

(19)第一个“文件”的子菜单项的事件处理

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,"对不起,此功能尚未实现!","提示",JOptionPane.WARNING_MESSAGE);

}//页面设置结束

//打印

else if(e.getSource()==fileMenu_Print)

{  editArea.requestFocus();

JOptionPane.showMessageDialog(this,"对不起,此功能尚未实现!","提示",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,"对不起,此功能尚未实现!","提示",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"+

" 编写时间:2017-12-14                          \n"+

" 更多问题:可以联系我的邮箱哦    \n"+

" e-mail:123456789@163.com                \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());

}

}

(20)主函数执行

推荐阅读更多精彩内容