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:llqqxf@163.com    \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函数结束
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java运用SWT插件编写桌面记事本应用程序

    本文实例介绍了Java基于SWT编写记事本的详细过程,分享给大家供大家参考,具体内容如下 可实现windows系统桌面记事本基本功能,傻瓜式教学,一步一步手把手操作.小白也可自己编写出完整的应用程序. 需要工具:Eclipse(带SWT插件) 成品如下: 应用程序功能介绍: 功能分析: 1.文件(F) 2.编辑(E) 3.格式(O) 4.查看(V) 5.帮助(H) 其中文件菜单中包括 1.1.新建(N) Ctrl+N 1.2打开(O) Ctrl+O 1.3保存(S) Ctrl+S 1.4另存为(

  • Java文件(io)编程之记事本开发详解

    本文实例为大家分享了Java开发简易记事本的具体代码,供大家参考,具体内容如下 public class NotePad extends JFrame implements ActionListener{ //定义需要的组件 JTextArea jta=null; //多行文本框 JMenuBar jmb=null; //菜单条 JMenu jm1=null; //菜单 JMenuItem jmi1=null,jmi2=null; //菜单项 public static void main(St

  • 简单记事本java源码实例

    本文实例讲述了简单记事本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 ser

  • Java图形界面开发之简易记事本

    在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: package com.package3; /* * 功能:简易记事本的开发,可以保存文件,打开文件,退出记事本 * author:ywq */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*

  • 怎么运行用记事本写的java程序

    今天用记事本写了一个java程序,测试能运行,现在把它分解成几个步骤,利于大家理解: 1. 新建一个记事本,后缀名是  .java  :然后在里面写一段java的代码,如图: 2.把写好的java文件丢进D盘,就是第一步给出的那个class文件: 3. 打开dos界面 开始-〉运行-〉cmd-〉 这个是命令行模式,选择D盘,如图: 4.选择D盘之后,在命令提示符中输入"javac 文件名.java",我的文件名为java,所以输入javac java.java然后回车,等待编译.这时候

  • Java实现的简易记事本

    本文实例讲述了Java实现的简易记事本.分享给大家供大家参考.具体如下: 感觉这个没有自己以前用Windows API写的好看了... JDK Version : 1.7.0 效果如下图所示: 源代码如下: import java.io.*; import java.awt.*; import java.awt.event.*; /** * The Main Window * @author Neo Smith */ class PadFrame extends Frame { private

  • 使用记事本编写java程序全过程图解

    Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于个人PC.数据中心.游戏控制台.科学超级计算机.移动电话和互联网,同时拥有全球最大的开发者专业社群. 新建java第一种方法 1首先右击鼠标,新建一个文本文档. 2更改文本文档的后缀名为 .java .注意文件名必

  • 使用Java制作一个简单的记事本

    通过使用Java的Swing.IO来实现一个简单记事本,实现打开指定的text文本文件,然后将text文件的内容加载到Swing组件中,然后在Swing组件中编辑记事本内容,然后同菜单的保存选项将编辑后的内容保存到text文件中.代码如下: 复制代码 代码如下: import java.io.*; import java.nio.*; import java.nio.channels.*; import java.nio.charset.*; import java.awt.*; import

  • Java Web使用简单的批处理操作(记事本+Tomcat)

    之前进行Web开发的时候使用的是myeclipse,但只用过的人都知道,由于其插件太多,而且有很多插件的功能根本就接触不到.所以导致一旦工程稍微大一点就会很卡,虽然之前也对其进行优化过,但还是觉得不太好用.今天闲来无事,就决定尝试一下最原始的办法,使用记事本+Tomcat进行开发.虽然效率不是很高,但是熟悉了最基本的一些操作,也算是颇有收获.而在在篇博客中,我将分享一下我觉得今天最大的收获. 我们都知道,我们要将项目在Tomcat中部署运行,所使用的.class文件需要保存到一个特定的目录下(当

  • 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.*;

  • 基于Java实现记事本功能

    本文实例为大家分享了Java实现记事本的具体代码,供大家参考,具体内容如下 编写一个具有菜单以及编辑.查找.替换.复制.粘贴功能,且具有新建.打开和保存文件功能的记事本(MyNotepad). package ch7; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; imp

  • Java利用IO流实现简易的记事本功能

    要求:编写一个模拟日记本的程序,通过在控制台输入指令,实现在本地新建文件,打开日记本和修改日记本等功能. 指令1代表“新建日记本”,可以从控制台获取用户输入的日记内容 指令2代表“打开日记本”,读取指定路径的TXT文件的内容并输出到控制台 指令3代表“修改日记本”,修改日记本中原有的内容 指令4代表保存 指令5代表退出 import java.io.*; import java.util.Scanner; public class IO_日记本 { /** * 模拟日记本程序 */ privat

  • Android实现记事本功能(26)

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 MainActivity.java代码: package siso.smartnotef.activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.

  • Android+SQLite数据库实现的生词记事本功能实例

    本文实例讲述了Android+SQLite数据库实现的生词记事本功能.分享给大家供大家参考,具体如下: 主activity命名为 Dict: 代码如下: package example.com.myapplication; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase;

  • Android利用Intent实现记事本功能(NotePad)

    本文实例为大家分享了Intent如何实现一个简单的记事本功能的演示过程,供大家参考,具体内容如下 1.运行截图 单击右上角[-]会弹出[添加]菜单项,长按某条记录会弹出快捷菜单[删除]项. 2.主要设计步骤 (1)添加引用 鼠标右击[引用]à[添加引用],在弹出的窗口中勾选"System.Data"和"System.Data.SQlite",如下图所示: 注意:不需要通过NuGet添加SQLite程序包,只需要按这种方式添加即可. (2)添加图片 到Android

  • listview与SQLite结合实现记事本功能

    android记事本的demo在网上一搜一大堆,但是大神写的demo往往功能太多导致新手难以着手,很难啃得动:而一些新手写的demo又往往是东拼西凑,代码很多都是copy的别人的,直接放在项目里面用,也不知道代码有什么作用.往往代码特别丑,重复性的代码也比较多. 笔者近期学到此处,自己理解之后也还是打算写个demo供新手学习一下.代码说不上优雅,但在笔者看来已经尽力去让人容易理解了.(源码在文章结尾) 为了便于新手学习,在此也是罗列一下涉及的知识点: 1.SQLite的基本使用,增删查改 2.l

  • java实现屏幕共享功能实例分析

    本文实例讲述了java实现屏幕共享功能的方法.分享给大家供大家参考.具体分析如下: 最近在做软件软件工程的课程设计,做一个用于实验室的屏幕监控系统,参考各种前人代码,最后领悟之后要转换自己的代码,初学者都是这样模仿过来的. 说到屏幕监控系统,有教师端和学生端,教师端就是Server端,学生端就做Client端.系统里比较有趣的一个地方应该算是屏幕广播与屏幕监控吧,其余什么点名签到,锁屏,定时关机的,就相对来说简单点. 屏幕广播,在功能实现上面,说白了,就是教师端的机器不断截取屏幕信息,以图片的形

  • Java实现发送邮件功能时碰到的坑

    之前用163邮箱发邮件时明明是成功的,但是使用中国移动自己的邮箱时,无论如何在linux服务器中都发送不成功,一开始报如下错误: javax.mail.MessagingException: Unknown SMTP host: mail.chinamobilesz.com at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1959) ~ [mail-1.4.7.jar:1.4.7] at com.sun.mail.

  • Java生成验证码功能实例代码

    页面上输入验证码是比较常见的一个功能,实现起来也很简单.给大家写一个简单的生成验证码的示例程序,需要的朋友可以借鉴一下. 闲话少续,直接上代码.代码中的注释很详细. package com.SM_test.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import ja

随机推荐