




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA应用与开发程序设计报告( 2011/2012学年 第2学期)题 目: 文本编辑器 班 级 网工二班 学 生 姓 名 俞兴华 学 号 0906840539 所 属 分 组 B 日 期 2012/4/5 评 分 细 则评分项优秀良好中等及格不及格出勤(10%)纪律(10%)程序演示(10%)程序完成情况(20%)报告(50%)总评分教师签名: 年 月 日一、 课题内容和要求实现类似Windows操作系统“记事本”的功能。它是一个简单的文本文档编辑器,可以创建、查看或编辑文本文件。可以复制、粘帖、剪切、查找、替换、字体格式设置等功能,而且还扩展了显示光标所在位置的行列状态信息,并且在标题栏上显示系统时间的功能。二、 需求分析在科学技术飞速发展的今天,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。在社会生活中我们经常需要用电脑编写一些文档来保存文件,本课程设计是运用了JAVA软件开发工具开发的应用软件,训练学生灵活应用所学Java语言的基本知识,熟练的完成问题分析、算法设计、编写程序,求解出指定的问题;巩固、深化理论知识,提高编程水平,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。(1)主框架类:Win 要求:完成对主框架的布局设计,菜单条、菜单项的添加,状态栏的添加。并完成对键盘事件,鼠标移动事件,菜单点击事件,文本区事件的响应。所以必须实现接口:KeyListener,ActionListener,MouseMotionListener,DocumentListener。鼠标右键时弹出菜单选项等等功能。主框架类的方法:1. Win(String s)带参数构造方法,完成主框体的初始化以及对各个组件初始化并且添加相应的响应事件。 2public void windowClosing(WindowEvent e)完成关闭窗体时的事件响应,要求只要文本区内容一改变,则在关闭主框架时提示是否需要保存,否则直接关闭退出。3.public void mousePressed(MouseEvent e) 完成鼠标点击的事件响应,要求点击鼠标左键时,在状态栏显示光标所在的新位置所属行列信息。点击鼠标右键时,弹出弹出式菜单,包含基本的复制、粘 帖、剪切、删除、全选、撤销功能。4. public void keyTyped(KeyEvent e) public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e) 完成对各个键盘事件的响应。5. public void changedUpdate(DocumentEvent e) public void removeUpdate(DocumentEvent e) public void insertUpdate(DocumentEvent e) 完成对文本内容改变,移除,插入操作的响应。6. public void actionPerformed(ActionEvent e) 完成对各个菜单项点击事件的响应。7. public void mouseMoved(MouseEvent e)public void mouseDragged(MouseEvent e)完成鼠标移动,拖动事件的响应,可以先不实现。8. public String getdate() 完成得到系统时间,并返回已字符串类型化的系统时间。String也是一个类。9. public TimerTask gettimertask() 完成每隔一定的时间在标题栏显示系统时间,使之看起来像一个钟表一样。10. public void saveFile() 完成保存文件的功能。11. public void saveAs() 完成另存为的功能。12. public void writeInFile(File file)完成文件的写入功能,为保存,另存为函数所用。13. public static String getText()完成对主框架文本内容的调用,方便查找、替换对话框对主框架文本内容的调用(必须添加static) 14. public static void select(int start,int end)方便查找、替换对话框对主框架文本内容特定位置的选择。14. public static void replaceSelection(String s)方便替换对话框对主框架所选择的文本内容用s去替换。 (2)字体对话框类:FontDialog要求:完成字体对话框的布局设计,各组件的添加。并完成按钮,下拉列表的相应事件响应。实现接口:ActionListener,ItemListener。 字体对话框类方法:1. FontDialog(JFrame f,String s,boolean b)带参数构造方法,完成字体对话框的初始化,f为所依赖的主框体,s为字体对话框的标题,b为对话框的模式。并为各个组件添加相应的事件响应。2. public void windowClosing(WindowEvent e)完成关闭对话框时的事件处理。3. public void actionPerformed(ActionEvent e)完成各按钮的点击事件响应。 4. public void itemStateChanged(ItemEvent e) 完成各下拉列表的事件响应。5.public int getMessage()返回字体对话框的状态信息,1表示确定,0表示取消 6. public Font getFont() 返回字体对话框所选择的字体类型。 (3)查找对话框类:LookDialog要求:完成查找对话框的布局设计,各组件的添加。并完成按钮,单选框的相应事件响应。实现接口:ActionListener,ItemListener。 字体对话框类方法:1. LookDialog(JFrame f,String s,boolean b)2. public void windowClosing(WindowEvent e)3. public void itemStateChanged(ItemEvent e)4. public void actionPerformed(ActionEvent e)同字体对话框要求一样。(4)替换对话框类:ReplaceDialog要求:完成替换对话框的布局设计,各组件的添加。并完成按钮,单选框的相应事件响应。实现接口:ActionListener,ItemListener。 字体对话框类方法:1. ReplaceDialog (JFrame f,String s,boolean b)2. public void windowClosing(WindowEvent e)3. public void itemStateChanged(ItemEvent e)4. public void actionPerformed(ActionEvent e)同字体对话框要求一样。 (5)程序入口类:public class Example开始程序的执行。三、概要设计 主框架类类成员中包含这三个类字体对话框类查找对话框类替换对话框类程序入口类创建一个主框架类各类的方法已经在前面说过,这里就说下类的主要成员。主框架类:WinFontDialog fontdialog; /实现字体对话框功能的调用LookDialog lookdialog; /实现查找对话框功能的调用ReplaceDialog replacedialog; /实现替换对话框功能的调用static JTextArea text; /静态文本域,方便其它类调用JMenuBar menubar; /菜单条JMenu file,edit,form,help; /菜单,分别为文件、编辑、格式、帮助 JPopupMenu popmenu; / 鼠标右键弹出菜单 JMenuItem itemCopy,itemCut,itemPaste,revocation,delete,look,replace,selectall,date,newfile,open,save,saveas,exit,change,font,colour,helpitem,about; /主框架上的各个菜单项JMenuItem itemCopy1,itemCut1,itemPaste1,selectall1,revocation1,delete1; /鼠标右键弹出菜单上的菜单项JScrollPane scroll; /滚动面板,将text放在滚动面板上JLabel lable; /状态栏,显示行列信息Calendar c; /日历类,获得系统时间 UndoManager undo; /用于实现撤销功能Timer t; /增加一个线程,用于实现实时显示系统时间static int i=0; /为自动换行设置的标志位,0表示已选择,1表示未选择static int textchange=0; /标志位,表示文本内容是否改变,0表示未改变,1表示改变static File myfile=null; /用于打开文件获得文件名称,名称空时,保存需输入文件名,不为空时,直接保存。字体对话框类:static int message=0; /用于标识是否点击确定按钮,从而改变字体,为零表示无需修改static inttype=0,intsize=20; static String name=宋体; /分别表示字体的名字、样式、大小,初始时为主框体文本字体格式,(宋体、常规、20)static Font returnfont=null; / 返回字体,以该字体修改文本JComboBox fontbox,typebox,sizebox; / 下拉列表,分别为类型,样式,大小JLabel font,type,size; /用于表示下拉列表的功能JTextArea style; /用于实时显示所选择的字体格式JButton yes,no; /确定,取消按钮查找对话框类:static String content; /表示要查找的内容static int message=1,index=0; /message表示是否区分大小写,1表示区分,0表示不区分,index表示查找的起始位置JLabel looklabel,label1; /标签,第一个标识查找内容,第二个表示是否区分大小写JTextField looktext; /输入要查找的内容JButton next,cancel; /查找下一个,取消JCheckBox check; /单选框,表示是否区分大小写替换对话框类:static String content,replacecontent; /查找内容,替换内容static int message=1,index=0; /与查找对话框一样JLabel looklabel,replacelabel,label1; /标签,查找,替换,区分大小写JTextField looktext,replacetext; /输入查找内容,替换内容JButton next,replace,replaceall,cancel; /下一个,替换,全部替换,取消JCheckBox check; /单选框,表示是否区分大小写程序入口类:没有成员,只有一条创建主窗体语句。四、详细设计 各个部分实现的源程序,源程序要按照写程序的规则来编写。要结构清晰,重点方法、重点变量、重点功能要1. static JTextArea text; 这个必须要设置成static静态类型,否则查找、替换功能无法调用主窗体的文本内容,也就没办法实现查找、替换功能。2. static File myfile=null; 初始时设置为空,只有在打开文件是才给myfile赋值,通过检查myfile是否为空来确定保存时调用另存为空能,还是调用保存功能。3. static int textchange=0; if(textchange=1) saveFile(); System.exit(0); elseSystem.exit(0); 初始时设置为0,表示文本内容是否改变,只要文本内容一改变,就将此赋值为1。当关闭窗体时为1提示是否需要保存,否则直接关闭。4. static int i=0; 初始时设置为0。用于表示是否自动换行,0表示自动换行,1表示不自动换行。 5.Timer t = new Timer(); t.scheduleAtFixedRate(gettimertask(), new Date(), 1000); 执行线程,实时显示系统时间,每隔一秒执行一次 6.状态栏显示光标所在位置行列功能,以及鼠标左键弹出菜单功能text.addMouseListener(new MouseAdapter() /文本区添加鼠标事件,用鼠标适配器实现,功能在状态栏中显示光标所在的行列 public void mousePressed(MouseEvent e) if(e.getModifiers()=InputEvent.BUTTON3_MASK) /点击鼠标右键响应 popmenu.show(text,e.getX(),e.getY(); /显示弹出菜单 if(e.getModifiers()=InputEvent.BUTTON1_MASK) / 点击鼠标左键响应 int row = 0; int col = 0; int pos = text.getCaretPosition(); / 获得光标相对0行0列的位置 / 列! col = pos - text.getText().substring(0, pos).lastIndexOf(n); / 行! try row = text.getLineOfOffset(pos) + 1; / 返回行是从0算起的,所以+1 catch(Exception exception) lable.setText(行:+Integer.toString(row)+ +列:+Integer.toString(col); /状态栏显示行列信息 ); 7.键盘组合键响应事件public void keyTyped(KeyEvent e) JTextAreate=(JTextArea)e.getSource(); if(e.getModifiers()=InputEvent.CTRL_MASK&e.getKeyCode()=KeyEvent.VK_X) te.cut(); /剪切功能else if(e.getModifiers()=InputEvent.CTRL_MASK&e.getKeyCode()=KeyEvent.VK_C) te.copy(); /复制功能 else if(e.getModifiers()=InputEvent.CTRL_MASK&e.getKeyCode()=KeyEvent.VK_V) te.paste(); /粘帖功能 else if(e.getModifiers()=InputEvent.CTRL_MASK&e.getKeyCode()=KeyEvent.VK_A) te.selectAll(); /全选功能 else if(e.getModifiers()=InputEvent.CTRL_MASK&e.getKeyCode()=KeyEvent.VK_D) te.replaceSelection(); /删除功能 else if(e.getModifiers()=InputEvent.CTRL_MASK&e.getKeyCode()=KeyEvent.VK_F5) te.replaceSelection(getdate(); /粘帖日期功能 else if(e.getModifiers()=InputEvent.CTRL_MASK&e.getKeyCode()=KeyEvent.VK_Z) /撤销功能 if (undo.canUndo() try undo.undo(); catch (CannotUndoException ex) JOptionPane.showMessageDialog(this,无法撤销,警告,JOptionPane.WARNING_MESSAGE); 8.获取系统时间public String getdate() /得到系统时间 int year=0; int month=0; int day=0;int hour=0;int minute=0;int second=0;String s; c=Calendar.getInstance();year=c.get(Calendar.YEAR); month=c.get(Calendar.MONTH)+1;/系统日期从0开始算起 day=c.get(Calendar.DAY_OF_MONTH);hour=c.get(Calendar.HOUR_OF_DAY);minute=c.get(Calendar.MINUTE);second=c.get(Calendar.SECOND);s=Integer.toString(year)+/+Integer.toString(month)+/+Integer.toString(day)+ ;if(hour=9)s=s+0+Integer.toString(hour)+:;elses=s+Integer.toString(hour)+:;if(minute=9)s=s+0+Integer.toString(minute)+:;elses=s+Integer.toString(minute)+:;if(second=9)s=s+0+Integer.toString(second);elses=s+Integer.toString(second); return s; 9. 得到一个TimerTask线程public TimerTask gettimertask() /得到一个TimerTask线程 TimerTask task = new TimerTask() public void run() String time=getdate(); if(myfile!=null) setTitle(文本编辑器-+myfile.getName()+ +time); else setTitle(文本编辑器+ +time); ; return task; 10.文件保存另存为功能public void saveFile() / 提示用户是否保存 int result1=JOptionPane.showConfirmDialog(this, 确定要保存吗?, 提示, JOptionPane.OK_CANCEL_OPTION); if (result1= JOptionPane.OK_OPTION) if(myfile!=null) / 有打开的文件了,就直接保存 try fw=new FileWriter(myfile, false); bw = new BufferedWriter(fw); bw.write(text.getText(); bw.close(); fw.close(); /this.btnSave.setEnabled(false); JOptionPane.showMessageDialog(this, 保存成功, 提示,JOptionPane.INFORMATION_MESSAGE); catch (FileNotFoundException fe) catch (IOException ie) else / 没有打开的文件,就转到另存为 saveAs(); / 文件另存为 public void saveAs() int returnVal = filesave.showSaveDialog(con); if (returnVal = JFileChooser.APPROVE_OPTION) File newFile = null; String fileType = filesave.getFileFilter().getDescription(); / 确定文件后缀名 if (fileType.length() = 11) fileType = fileType.substring(1, 5); else fileType = fileType.substring(1, 6); newFile = new File(filesave.getCurrentDirectory(),filesave.getSelectedFile().getName()+ fileType); try if (newFile.exists() int result = JOptionPane.showConfirmDialog(this,该文件已存在,确定要覆盖吗?, 提示,JOptionPane.OK_CANCEL_OPTION); if (result = JOptionPane.OK_OPTION) / 有同名的文件,直接修改 writeInFile(newFile); else / 新建文件 saveAs(); else newFile.createNewFile(); writeInFile(newFile); catch (FileNotFoundException fe) JOptionPane.showMessageDialog(this, 在指定目录下没有找到文件!, 提示, JOptionPane.INFORMATION_MESSAGE); catch (IOException ie) JOptionPane.showMessageDialog(this, 修改文件出错!, 提示, JOptionPane.INFORMATION_MESSAGE); public void writeInFile(File file) throws IOException, FileNotFoundException FileWriter fwCh = new FileWriter(file, false); BufferedWriter bwCh = new BufferedWriter(fwCh); bwCh.write(text.getText(); bwCh.close(); fwCh.close(); / 保存成功后,提示信息 JOptionPane.showMessageDialog(this, 文件保存成功!, 提示,JOptionPane.INFORMATION_MESSAGE); 11查找替换功能if(e.getSource()=next) /点击查找下一个按钮 String str; if(message=1) /标志,如果为1表示区分大小写 content=looktext.getText().trim();/去除查找内容中的空格字符 str=Win.getText(); else /否则不区分大小写,采用将字符串全部转换成小写策略 content=looktext.getText().trim().toLowerCase(); str=Win.getText().toLowerCase(); index=str.indexOf(content,index); /第一次查找,index初始值是0 if (index != -1) /如果为-1表示没有查找到,不执行 Win.select(index,index+content.length(); /选择查找到的内容 index=index+content.length(); /将起始查找位置变为查找到的内容末尾 else JOptionPane.showMessageDialog(this, 查找不到字符!, 提示,JOptionPane.INFORMATION_MESSAGE); else if(e.getSource()=replace) /点击替换按钮 replacecontent=replacetext.getText().trim(); /得到替换的内容 if(replacecontent!=null) /如果为空,提示请输入替换内容 Win.replaceSelection(replacecontent); /替换查找到的内容 else JOptionPane.showMessageDialog(this, 请输入替换内容!, 提示,JOptionPane.INFORMATION_MESSAGE); 五、测试数据及其结果分析1查找替换文本内容为:aabbccddeeffgg查找内容为:dd 结果:查找到正确的内容,再点击查找下一个时:由于不存在下一个dd字符串,提示查找不到字符。文本内容为:aabbccddeeffgg查找内容为:dd 替换内容为:DD先查找到所要查找的内容:点击替换后:2.字体设置:选择字体格式为:华文彩云,粗体,36点击确定后:正确把文本内容设置成所选的字体格式。3.调色板功能 把文本内容设置成红色 选择完成点击确认后:六、调试过程中的问题问题一:如果文本内容改变,如何实现关闭窗口时提示是否需要保存。刚开始时有点茫然,因为主窗体设置关闭窗口时是直接关闭,退出程序,不知道该在哪个地方写代码,查找课件后知道可以添加窗口事件监听,用WindowAdapter适配器来实现接口。在public void windowClosing(WindowEvent e)函数中写代码。那如何知道文本内容改变了呢?我设置了一个静态标志static int textchange=0;并为文本添加(text.getDocument().addDocumentListener(this)监听,只要内容一改变就将静态标志设置为1.问题二:如何实现文本撤销功能文本自带的函数中有复制,粘帖,剪切功能,查找JDK文档发现文本没有自带的撤销功能,同时我也不知道哪个类有自带的撤销功能,上网搜索后查到UndoManager类的undo()方法可以实现。问题三:如何实现文本删除功能对于所选择的内容,怎样点击删除菜单项实现删除,JDK中我没有发现有含有delete字符的函数,又不知道怎么办!于是只好在文本的所有函数中慢慢查找,看看有没有其他函数可以实现删除功能,发现text.replaceSelection()函数可以,采用空字符串的内容代替选择的内容,效果与删除一样。问题四:调用JColorChooser类的调色板是,点击取消文本颜色应该不变,可实际上文本变成了默认的黑色。在查看JDK文档后发现点击取消返回一个null的Color类,因此我增加一个if判断语句,如果为空不改变文本颜色。if(newColor!=null)text.setForeground(newColor);问题五:如何实时显示系统时间开始时我明白一定要在每隔一定的时间就要执行一次的函数里面写代码,一般的函数无法实现实时功能。上网搜索后知道可以添加一个线程,用Timer类来实现每隔一秒更新一次时间。问题六:查找对话框如何实现点击一次,查找一次功能开始时我在查找对话框类中添加响应函数,但是却无法调用主窗口中的文本,之后我将代码写在主窗体中,但是不仅无法实现点击一次,查找一次的功能,还出现异常。这个问题一直困扰了很久,最后与其它组做同样题目的同学交流了一下,他也遇到同样的问题,不过可以用设置静态static文本就可以用了,在这提醒下,我把文本设置为静态,代码写在查找对话框类中,终于解决了这个问题。问题七:替换与全部替换时功能紊乱,如何正确实现写完替换功能代码后,(全部替换)代码如下:其中注释的代码开始没有if(replacecontent!=null) /输入的替换字符串不为空 index=str.indexOf(content
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- mtbe考试试卷及答案
- 电网业务知识培训课件
- 电缆厂知识培训课件
- 电磁兼容原理课件接地
- 高端酒销售基础知识培训课件
- 新解读《GB-T 32151.11-2018温室气体排放核算与报告要求 第11部分- 煤炭生产企业》
- Ochracenomicin-B-生命科学试剂-MCE
- Acetohexamide-d11-生命科学试剂-MCE
- MLN-591-MLN2704-antibody-生命科学试剂-MCE
- 保育大赛考试试题题库及答案
- 2024-2025学年重庆外国语学校高一(上)入学数学试卷(含答案)
- 《机械常识(第2版)》中职技工全套教学课件
- 冷弯型钢项目可行性报告
- 咖啡学概论智慧树知到期末考试答案章节答案2024年华南理工大学
- 2023房屋安全鉴定服务规范
- 床垫营销方案
- 促销方法与促销技巧
- 数字经济概论 教学大纲
- 09J202-1 坡屋面建筑构造(一)-1
- 英式橄榄球和美式足球的比较分析
- 2024年贵州水投水务集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论