中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Java怎么實現一個記事本功能

發布時間:2020-11-21 17:12:38 來源:億速云 閱讀:530 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關使用Java怎么實現一個記事本功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

源碼:

 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函數結束
}

看完上述內容,你們對使用Java怎么實現一個記事本功能有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

静宁县| 甘洛县| 黔南| 张北县| 龙胜| 建始县| 微博| 云梦县| 曲麻莱县| 高青县| 桓仁| 休宁县| 莒南县| 万山特区| 公主岭市| 永春县| 吴江市| 通榆县| 错那县| 田阳县| 易门县| 浏阳市| 昌乐县| 定陶县| 屏南县| 深州市| 和静县| 四川省| 吉安县| 同仁县| 阿拉尔市| 隆德县| 田阳县| 朝阳市| 正宁县| 长汀县| 都兰县| 泉州市| 丹寨县| 井陉县| 开化县|