[毕业设计精品] 文本编辑器的设计与实现.doc
目录1 设计时间12 设计目的13 设计任务14 设计内容14.1需求分析14.2概要设计14.2.1系统功能图14.3详细设计24.3.1 系统流程图24.4系统功能与实现24.4.1 类或包的加载24.4.1构建菜单栏及其下拉菜单34.5 运行与测试195 总结与展望21参考文献23成绩评定231 设计时间2011年12月19日-2011年12月25日2 设计目的文本编辑器的设计与实现3 设计任务设计文本编辑器,实现打开、新建、保存一个文本文件;设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等功能。4 设计内容 4.1需求分析 在科学技术飞速发展的今天,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。应用JAVA技术实现学生学习实践是可行而必要的工作 。在社会生活中我们经常需要用电脑编写一些文档来保存文件,本课程设计是运用了JAVA软件开发工具开发的应用软件4.2概要设计4.2.1系统功能图记事本程序文件编辑查找格式保存退出打开剪切复制粘贴查找替换帮助字体4.3详细设计4.3.1 系统流程图开始打开记事本打开文件菜单项打开编辑框显示文字打开帮助菜单项在各自功能中切换退出结束4.4系统功能与实现4.4.1 类或包的加载import java.awt.*;import java.awt.event.*;import java.awt.datatransfer.*;import javax.swing.*;import java.io.*;import java.lang.*;4.4.1构建菜单栏及其下拉菜单 / 设置文件菜单及其菜单项 JMenu fileMenu = new JMenu( "文件(F)" ); fileMenu.setMnemonic( 'F' ); / 设置新建菜单项 JMenuItem newItem = new JMenuItem( "新建(N)" ); newItem.setMnemonic( 'N' ); fileMenu.add( newItem ); newItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) displayText.setText(""); ); / 设置打开菜单项 JMenuItem openItem = new JMenuItem( "打开(O)" ); openItem.setMnemonic( 'O' ); fileMenu.add( openItem ); openItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) fd.setTitle("打开"); /设置标题 fd.show();if (fd.getFile() != null) File file = new File(fd.getFile(); /用从fd中取得的文件建立新文件,即打开的文件displayText.setText( "");try FileReader f = new FileReader(file);BufferedReader b = new BufferedReader(f);/按行读打开的文件,然后传入文本域String s;try while (s = b.readLine() != null) displayText.append(s + "n");/将给定文本追加到文本域的当前文本(即把读的内容加入文本域)f.close();b.close(); catch (IOException ex) catch (FileNotFoundException ex) else return; ); fileMenu.addSeparator(); /加分隔线 / 设置保存菜单项 JMenuItem saveItem = new JMenuItem( "保存(S)" ); saveItem.setMnemonic( 'S' ); fileMenu.add( saveItem ); saveItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) fd.setFile("*.java"); fd.setMode(FileDialog.SAVE);fd.setTitle("保存");fd.show(); if (fd.getFile() != null) File file = new File(fd.getFile();try PrintWriter pw = new PrintWriter(new FileOutputStream(file);/1.5版本之前用这一句,之后可以用PrintWriter pw = new PrintWriter(file);pw.print(displayText.getText();/这一部分用于把textArea1中的内容打印到pw指定的文件file中去,file围在对话框中选定的文件pw.flush(); /刷新该流的缓冲,然后关闭该流pw.close(); catch (FileNotFoundException ex) ex.printStackTrace(); else return; ); / 设置另存为菜单项 JMenuItem saveAsItem = new JMenuItem( "另存为(Z)" ); saveAsItem.setMnemonic( 'Z' ); fileMenu.add( saveAsItem ); saveAsItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) fd.setFile("*.java"); fd.setMode(FileDialog.SAVE);fd.setTitle("另存为");fd.show(); if (fd.getFile() != null) File file = new File(fd.getFile();try PrintWriter pw = new PrintWriter(new FileOutputStream(file);/1.5版本之前用这一句,之后可以用PrintWriter pw = new PrintWriter(file);pw.print(displayText.getText();/这一部分用于把textArea1中的内容打印到pw指定的文件file中去,file围在对话框中选定的文件pw.flush(); /刷新该流的缓冲,然后关闭该流pw.close(); catch (FileNotFoundException ex) ex.printStackTrace(); else return; ); fileMenu.addSeparator(); /加分隔线 / 设置退出菜单项 JMenuItem exitItem = new JMenuItem( "退出(X)" ); exitItem.setMnemonic( 'x' ); fileMenu.add( exitItem ); exitItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) System.exit( 0 ); );bar.add( fileMenu );/*-*/ /创建编辑菜单及其菜单项 JMenu editMenu = new JMenu( "编辑(E)" ); editMenu.setMnemonic( 'E' ); /剪切菜单选项 JMenuItem cutItem = new JMenuItem( "剪切(T)" ); cutItem.setMnemonic( 'T' ); editMenu.add( cutItem ); cutItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) selectText = displayText.getSelectedText();/取得选定的文本int start = displayText.getSelectionStart();/选定的文本的开始位置int end = displayText.getSelectionEnd();/选定的文本的结束位置displayText.replaceRange("", start, end);/*用指定替换文本替换指定开始位置与结束位置之间的文本。 这里指定替换文本为空,即为剪切了文本*/ ); /复制菜单选项 JMenuItem copyItem = new JMenuItem( "复制(C)" ); copyItem.setMnemonic( 'C' ); editMenu.add( copyItem ); copyItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) selectText = displayText.getSelectedText();/获得选中的内容,并保存在selectText里 ); /粘贴的实现 JMenuItem pasteItem = new JMenuItem( "粘贴(P)" ); pasteItem.setMnemonic( 'P' ); editMenu.add( pasteItem ); pasteItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) int position = displayText.getCaretPosition();/获得鼠标当前位置 displayText.insert( selectText,position );/插入到鼠标当前位置 ); editMenu.addSeparator();/加分隔线 /替换的实现 JMenuItem swapItem = new JMenuItem( "替换(R))" ); swapItem.setMnemonic( 'R' ); editMenu.add( swapItem ); swapItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) JPanel swapPanel=new JPanel(); JLabel lookupLabel=new JLabel("要替换的内容"); JTextField inputText=new JTextField(10); JLabel swapLabel=new JLabel("替换为:"); JTextField changetoText=new JTextField(10); swapPanel.add(lookupLabel); swapPanel.add(inputText); swapPanel.add(swapLabel); swapPanel.add(changetoText); JOptionPane.showMessageDialog(null,swapPanel); String text=displayText.getText();/获得整个文本内容 String changeText=text.replaceFirst(inputText.getText(),changetoText.getText();/获得替换后的内容 displayText.setText(changeText); ); /全部替换的实现 JMenuItem aswapItem = new JMenuItem( "全部替换(Q))" ); aswapItem.setMnemonic( 'Q' ); editMenu.add( aswapItem ); aswapItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) JPanel swapPanel=new JPanel(); JLabel lookupLabel=new JLabel("要替换的内容"); JTextField inputText=new JTextField(10); JLabel swapLabel=new JLabel("替换为:"); JTextField changetoText=new JTextField(10); swapPanel.add(lookupLabel); swapPanel.add(inputText); swapPanel.add(swapLabel); swapPanel.add(changetoText); JOptionPane.showMessageDialog(null,swapPanel); String text=displayText.getText();/获得整个文本内容 String changeText=text.replaceAll(inputText.getText(),changetoText.getText();/获得替换后的内容 displayText.setText(changeText); ); editMenu.addSeparator();/加分隔线 /插入子菜单 JMenuItem insertItem=new JMenuItem("插入文本(K)"); insertItem.setMnemonic('K'); editMenu.add(insertItem); insertItem.addActionListener( new ActionListener() public void actionPerformed(ActionEvent event) JPanel insertPanel=new JPanel(); JLabel insertLabel=new JLabel("要插入的内容"); JTextField inputText=new JTextField(10); insertPanel.add(insertLabel); insertPanel.add(inputText); JOptionPane.showMessageDialog(null,insertPanel); int fromIndex=displayText.getCaretPosition();/取得当前的光标位置 displayText.insert(inputText.getText(),fromIndex); ); /删除子菜单 JMenuItem RemoveItem=new JMenuItem("删除(G)"); RemoveItem.setMnemonic('G'); editMenu.add(RemoveItem); RemoveItem.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) int start=displayText.getSelectionStart(); int end=displayText.getSelectionEnd(); displayText.replaceRange(null,start,end); ); editMenu.addSeparator(); bar.add( editMenu );/add editMenu/*-*/ / 创建格式菜单及其菜单项 JMenu formatMenu = new JMenu( "格式(R)" ); formatMenu.setMnemonic( 'R' ); /自动换行的功能切换 JMenuItem changeItem = new JMenuItem( "自动换行(W)" ); changeItem.setMnemonic( 'W' ); formatMenu.add( changeItem ); changeItem.addActionListener( new ActionListener() boolean var = false; public void actionPerformed( ActionEvent event ) if(var) var = false; else var=true; displayText.setLineWrap(var); ); / 颜色菜单项 String colors = "黑色", "蓝色", "红色", "绿色" ; JMenu colorMenu = new JMenu( "颜色(C)" ); colorMenu.setMnemonic( 'C' ); colorItems = new JRadioButtonMenuItem colors.length ; colorGroup = new ButtonGroup(); ItemHandler itemHandler = new ItemHandler(); / 创建颜色按钮监听器 for ( int count = 0; count < colors.length; count+ ) colorItems count = new JRadioButtonMenuItem( colors count ); colorMenu.add( colorItems count ); colorGroup.add( colorItems count ); colorItems count .addActionListener( itemHandler ); / 默认颜色 colorItems 0 .setSelected( true ); / 将颜色菜单项菜单加入菜单 formatMenu.add( colorMenu ); formatMenu.addSeparator(); /加分隔线 / 字体菜单项 JMenu fontMenu = new JMenu( "字体(n)" ); fontMenu.setMnemonic( 'n' ); fonts = new JRadioButtonMenuItem fontNames.length ; fontGroup = new ButtonGroup(); / 创建字体按钮监听器 for ( int count = 0; count < fonts.length; count+ ) fonts count = new JRadioButtonMenuItem( fontNames count ); fontMenu.add( fonts count ); fontGroup.add( fonts count ); fonts count .addActionListener( itemHandler ); / 默认字体 fonts 0 .setSelected( true ); fontMenu.addSeparator(); / 设置风格菜单 styleItems = new JCheckBoxMenuItem styleNames.length ; for ( int count = 0; count < styleNames.length; count+ ) styleItems count = new JCheckBoxMenuItem( styleNames count ); fontMenu.add( styleItems count ); StyleHandler styleHandler = new StyleHandler(); styleItems count .addItemListener( styleHandler ); formatMenu.add( fontMenu ); bar.add( formatMenu );/*-*/ /创建查找菜单 JMenu searchMenu = new JMenu( "查找(S)" ); searchMenu.setMnemonic( 'H' ); /添加向前查找菜单项 JMenuItem frontItem = new JMenuItem( "向前查找(F)" ); frontItem.setMnemonic( 'F' ); searchMenu.add( frontItem ); frontItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) JPanel swapPanel=new JPanel(); JLabel seekLabel=new JLabel("要查找的内容"); JTextField inputText=new JTextField(20); swapPanel.add(seekLabel); swapPanel.add(inputText); JOptionPane.showMessageDialog(null,swapPanel); String text=displayText.getText();/获得整个文本内容 int fromIndex=displayText.getCaretPosition();/取得当前的光标位置 int lastfromIndex=text.indexOf(inputText.getText(),fromIndex);/获得查找后的位置 displayText.setCaretPosition(lastfromIndex); displayText.moveCaretPosition(lastfromIndex+inputText.getText().length();/使查找到的子字符串显示出来 ); /添加向后查找菜单项 JMenuItem backItem = new JMenuItem( "向后查找(B)" ); backItem.setMnemonic( 'B' ); searchMenu.add( backItem ); backItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) JPanel swapPanel=new JPanel(); JLabel seekLabel=new JLabel("要查找的内容"); JTextField inputText=new JTextField(20); swapPanel.add(seekLabel); swapPanel.add(inputText); JOptionPane.showMessageDialog(null,swapPanel); String text=displayText.getText();/获得整个文本内容 int fromIndex=displayText.getCaretPosition();/取得当前的光标位置 int lastfromIndex=text.lastIndexOf(inputText.getText(),fromIndex);/获得查找后的位置 displayText.setCaretPosition(lastfromIndex); displayText.moveCaretPosition(lastfromIndex+inputText.getText().length();/使查找到的子字符串显示出来 ); bar.add( searchMenu ); /添加/*-*/ /创建帮助菜单 JMenu helpMenu = new JMenu( "帮助(H)" ); helpMenu.setMnemonic( 'H' ); / 设置“关于(A).”菜单项 JMenuItem aboutItem = new JMenuItem( "关于(A)." ); aboutItem.setMnemonic( 'A' ); helpMenu.add( aboutItem ); aboutItem.addActionListener( new ActionListener() public void actionPerformed( ActionEvent event ) JOptionPane.showMessageDialo