时间:2020-10-07 14:26:52 | 栏目: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函数结束 }