首页 面向对象程序设计—文本编辑器的设计与实现

面向对象程序设计—文本编辑器的设计与实现

举报
开通vip

面向对象程序设计—文本编辑器的设计与实现课程设计报告书 课程名称     面向对象程序设计                设计题目    文本编辑器的设计与实现          专业班级                                    学    号                                    姓    名                                    指导教师                                    年    月 目录 1 设计时间   ...

面向对象程序设计—文本编辑器的设计与实现
课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 报告书 课程名称     面向对象程序设计                设计 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目    文本编辑器的设计与实现          专业班级                                    学    号                                    姓    名                                    指导教师                                    年    月 目录 1 设计时间    1 2 设计目的    1 3设计任务    1 4 设计内容    1 4.1需求分析    1 4.2概要设计    1 4.2.1功能结构图    1 4.3详细设计    2 4.3.1流程图    3 4.4系统的功能实现    4 4.4.1类或包的加载    5 4.4.2设计一个主类,变量的定义    5 4.4.3文件操作功能的实现    6 4.5运行测试    25 4.5.1文本编辑器界面    25 4.5.2各功能菜单界面    25 5 总结与展望    26 参考文献    26 成绩评定    27 1 设计时间 2011年12月19日~2011年12月25日 2 设计目的 本次设计是学习完《java6程序设计 》课程后进行的一次全面的综合练习,目的是加深对本学期课程的理解,通过设计文本编辑器并实现其功能来熟练掌握java语言基础,初步掌握软件开发的基本方法与技术将理论课程中学到的知识运用到实践中,实现有一定规模的Java应用。 3设计任务 本次设计的主要任务是文本编辑器的设计与实现,要求设计一个类似于Windows记事本(Notepad)的Java程序。可以打开、新建、保存一个文本文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等);在文本中能够插入对象。 4 设计内容 4.1需求分析 现在网络上各种文本编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed, xint 。功能也是应有尽有,有能改变字体的,有能改变文字颜色的。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的文本编辑器程序。 4.2概要设计 4.2.1功能结构图 新建 文件菜单 保存 打开 另存为 退出 剪切 编辑菜单 替换 复制 全部替换 粘贴 文本编辑器 插入文本 删除 自动换行 颜色 字体 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 菜单 向前查找 查找菜单 向后查找 关于 帮助主题 帮助菜单 4.3详细设计 文件菜单 4.3.1流程图 (1)文件: 打开 另存为 保存 选择文件存放位置 选择打开文件位置 确定 编辑菜单 (2)编辑: 替换 插入文本 全部替换 输入查找和替换内容 输入要插入的文本 确定 格式 (3)格式: 颜色 字体 选择所需字体 选择所需颜色 确定 查找 (4)查找: 向后查找 向前查找 输入查找内容 确定 (5)其他各功能菜单可直接点击完成操作 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.2设计一个主类,变量的定义 public class Notepad extends JFrame{ private final Color colorvalues[] = { Color.black, Color.blue, Color.red, Color.green }; //定义颜色数组 String styleNames[] = { "Bold", "Italic" };//定义风格数组 String fontNames[] = { "宋体", "华文行楷", "隶书" };//字体数组 String[] sizeString = new String[30];//字号数组 int[] size = new int[30];//与字号数组对应的字号整数,用于设置文字大小 private JRadioButtonMenuItem colorItems[], fonts[]; private JCheckBoxMenuItem styleItems[]; private JTextArea displayText;//定义文本编辑区 private ButtonGroup fontGroup, colorGroup;//字体组,跟字色组 private int style;//字体风格 private JScrollPane scroll;//为文本编辑区提供滚动条 private String selectText = "";//存放文本编辑区中选中的文本内容 private JComboBox styleBox,fontBox,sizeBox;//工具栏 private JPanel toolPanel;//存放工具栏 private int rowNumber = 0; private FileDialog fd = new FileDialog(this); // set up GUI public Notepad() { super( "记事本" );//标题 //创建菜单条 JMenuBar bar = new JMenuBar(); setJMenuBar( bar ); /*---------------------------------------------------------------------------------------*/ 4.4.3文件操作功能的实现 // 设置文件菜单及其菜单项 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.showMessageDialog( Notepad.this, "文本编辑器\n财升本11-2班", "关于", JOptionPane.PLAIN_MESSAGE ); rowNumber = displayText.getRows(); JOptionPane.showMessageDialog(null,""+ rowNumber); } } ); //添加帮助菜单项 JMenuItem helpItem = new JMenuItem( "帮助主题(H)..." ); helpItem.setMnemonic( 'H' ); helpMenu.add( helpItem ); helpItem.addActionListener( new ActionListener(){ public void actionPerformed( ActionEvent event ){ JTextArea helpText = new JTextArea( "格式里的自动换行说明:单击一次切换功能\n只能实现整个文本的风格,字体等的设置\n"+ "复制,粘贴可以实现插入到鼠标当前位置\n标题栏显示行数"); JScrollPane scroller = new JScrollPane(helpText); JOptionPane.showMessageDialog(null,scroller); } } ); bar.add( helpMenu ); //添加 /*-------------------------------------------------------------------------------------*/ //设置字体选项面板 //初始化字体大小数组 for(int i = 0 ; i 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 ,一次次翻阅各种参考资料是十分必要的,同时也是必不可少的。由于本次设计是用java进行开发,在这过程中我对各种的开发环境进行了探索,这使我对java的集成环境有了更深刻的理解。实践证明边学边用效率才能更高。 总而言之,本次课程设计中有收获也有遗憾,但我坚信只要今后我更加努力,更加认真,凭借我的热情和执着一定能做出更专业更完善的设计,在此感谢帮助过我的良师益友。 参考文献 [1] (美)威尔顿,麦可匹克. JavaScript入门经典(第3版). 施宏斌译. 北京:清华大学出版社,2009[2] (美)Marty Hall,Larry Brown. Servlet与JSP核心编程.第二版.赵学良译.北京:清华大学出版社,2004.06[3] 孙卫琴. 精通Struts:基于MVC的Java Web设计与开发.北京:电子工业出版社,2004 [4] 张孝祥. Java就业培训教程[M]. 北京:清华大学出版社,2003[5] 王国辉,李立文,杨亮.JSP数据库系统开发完全手册[6] 陈鹏,程勇. J2EE项目开发实用案例.北京:科技出版社,2006[7] (美)Bruce Eckel. Java编程思想. 陈昊鹏译. 北京:机械工业出版社,2007[8] 赵元杰. Oracle 10g系统管理员简明教程. 北京:人民邮电出版社,2006[9] 程伟,汪孝宜. 开发者突击:JSP网络开发经典模块实现全集. 北京:电子工业出版社,2008 成绩评定 成绩 教师签字  
本文档为【面向对象程序设计—文本编辑器的设计与实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_279425
暂无简介~
格式:doc
大小:70KB
软件:Word
页数:0
分类:互联网
上传时间:2019-09-02
浏览量:22