软件学院课程设计报告书课程名称设计题目文本编辑器的设计与实现专业班级__________ XXXXXXXXXXX _________________ 学号_______________ xxxxxxxxxx ________________ 姓名xxx指导教师2011年11月1设计时间2011年11月2设计目的《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。
其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。
目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行Java的编译与运行很少,不能更好的适应当前用户的要求。
本设计所完成的文本编辑器功能是针对学习Java 程序语言,因此我们利用Java程序设计虚拟机和软件对用户及使用者的应用过程形成一整套完整的编写代码,编译,运行。
3设计任务文本编辑器的设计与实现:设计一个类似于Windows记事本(NotepaQ的Java程序。
可以打开、新建、保存一个文本文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等);在文本中能够插入对象。
4设计内容4.1需求分析需求分析的任务是确定功能必须完成的工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
简单文本编辑器提供给用户基本的纯文本编辑功能,能够将用户录入的文本存储到本地磁盘中。
能够读取磁盘中现有的纯文本文件,以及方便用户进行需要的编辑功能。
文件操作能够实现新建、保存、打开文档等,编辑操作能过实现文本的剪贴、复制、粘贴等,格式操作能过实现字体设置、背景等,帮助操作能够实现关于主题的查看等功能。
4.2概要设计4.2.1程序基本功能概括图421 功能架构图4.2.2程序主要组件概括1.基本的Frame框架;2.菜单;3.打开文件对话框;4.保存文件对话框;5.颜色对话框;6.Choice下拉列表,运来实现字体设置;7.简单的帮助框架。
4.3详细设计4.3.1文件打开与保存文本编辑器的保存和打开功能的实现用文件对话框及输入输出流来完成。
先建立打开和保存对话框,在public void actionPeformed(ActionEvent e)里分别用FileWriter()和FileReader(方法实现保存和打开。
filedialog_save=newFileDialog(this,"保存文件对话框”,FileDialog.SAVE);filedialog_save.setVisible(false);filedialog」o ad=new FileDialog(this,"保存文件对话框”,FileDialog LOAD);f iledialog」o ad.setVisible(false);filedialog_save.addWi ndowListe ner(n eWWi ndowAdapter(){public void windowClosing(WindowEvent e){filedialog_save.setVisible(false);}});filedialog」o ad.addWi ndowListe ner(n ewWi ndowAdapter(){public void windowClosing(WindowEvent e){filedialog」o ad.setVisible(false);}});public void acti on Performed(Act ion Eve nte){if(e.getSource()==itemSave){filedialog_save.setVisible(true);if(filedialog_save.getFile()!=null){try {File file=newFile(filedialog_save.getDirectory(),filedialog_save.getFile()); tofile=new FileWriter(file);out=new BufferedWriter(tofile);out.write(area.getText(),0,(area.getText())」en gth());out.close();tofile.close();catch(IOException e1){} elseif(e.getSource()==itemLoad)filedialog」o ad.setVisible(true);area.setText (n ull);String s;if(filedialog」oad.getFile()!=null) try{File file=newFile(filedialog_load.getDirectory(), filedialog」oad.getFile());file_reader =n ewFileReader(file);in=new BufferedReader(file_reader);while((s=i n.readLi ne())!=null) area.appe nd(s+'\n');in .close();file_reader.close();}catch(IOExceptione1) {}432字体,字形,字体大小的设置文本编辑器要实现对字体的设置,选用了GraphicsE nviro nment对象调用Stri ng [] getAvailableFo ntFamilyNames(方法,该方法可以获取计算机上所有可用的字体名称,并存放到字符串数组中。
Choicelist;GraphicsE nviro nmentge=GraphicsE nviro nmen t.getLocalGraphicsE nviro nmen t();Stri ng fon tName[]=ge.getAvailableF on tFamilyNames();public void itemStateChanged(ltemEvene){String name=list.getSelectedltem();Fontf= new Font(name,Font.PLAIN,15);area.setF on t(f);}elseif(e.getSource()==item8) // 设置字形(常规,倾斜,加粗){Font fon t=area.getF on t();int style=fo nt.getStyle();style=style A0;area.setF on t( newFon t("",style,fo nt.getSize()));}elseif(e.getSource()==item9){Font fon t=area.getF on t();int style=fo nt.getStyle();style=styleA2;area.setFo nt( newFon t("",style,fo nt.getSize()));elseif(e.getSource()==item10){Font fon t=area.getF on t();int style=font.getStyle();style=style A1;area.setFo nt( newFon t("",style,fo nt.getSize()));}elseif(e.getSource()==item11) 〃设置字体大小{Font fon t=area.getF on t();int style=font.getStyle();area.setF ont(newFon t(fo nt.getName(),style,12));}elseif(e.getSource()==item12){Font fon t=area.getF on t();int style=font.getStyle();area.setF ont(newFon t(fo nt.getName(),style,24));}elseif(e.getSource()==item13){Font fon t=area.getF on t();int style=font.getStyle();area.setF ont(newFon t(fo nt.getName(),style,36));}4.3.3剪切,复制,粘贴设置文本编辑器中关于剪切,复制,粘贴功能的实现选用处理JTextArea的DocumentEvent事件,通过area.cut(,area.copy(), area.paste(方法,点击“编辑”中相应菜单项可以选择将文本区中选中的内容剪切,复制,粘贴。
public void changedUpdate(DocumentEvene){String s=area.getText();}public void removeUpdate(DocumentEvents){cha ngedUpdate(e);}public void insertUpdate(DocumentEvene){cha ngedUpdate(e);}public void acti on Performed(Act ion Eve nte){elseif(e.getSource()==item2){area.cut();}elseif(e.getSource()==item3){area.copy();}elseif(e.getSource()==item4){area.paste();}}4.3.4插入子菜单,删除子菜单,创建格式菜单及其菜单项JMenultem insertItem=new JMenultem(”插入文本(K)");in sertltem.set Mnemon ic('K');editMe nu .add(i nsertltem);in sertltem.addActio nListe ner(new ActionListener(){public void action Performed(Action Eventevent){JPa neli nsertPa nel=n ewJPa nel();JLabel insertLabel=newJLabel("要插入的内容");JTextFieldi nputText=newJTextField(10);in sertPa nel.add(i nsertLabel);in sertPa nel.add(i nputText);JOptio nPan e.showMessageDialog( null,i nsertPa nel);int fromI ndex=displayText.getCaretPositio n();/取得当前的光displayText.i 标位置nsert(i nputText.getText(),froml ndex);}});JMe nultem RemoveItem=n ewJMe nultem(” 删除(G)");RemoveItem.set Mnemon ic('G');editMe nu.add(Removeltem);Removeltem.addActio nListe ner(n ewActio nListe ner(){public void action Performed(Action Evente){ int start=displayText.getSelectionStart();int end=displayText.getSelectionEnd();displayText.replaceRa nge( null,start,e nd);}});editMe nu.addSeparator();bar.add(editMenu );//add editMenuJMenuformatMenu= newJMenu("格式(R)");formatMe nu.set Mnemon ic('R');435创建,添加帮助菜项JMenuhelpMenu= newJMenu(”帮助(H)");helpMenu.setMnemonic('H');JMenultemhelpltem = new JMenultem(”帮助主题(H)...");helpItem.setMnemonic('H');helpMe nu .add(helpltem);helpItem.addAct ion Liste ner(new ActionListener(){public void acti on Performed(Act ion Eve nt eve nt){JTextAreahelpText = new JTextArea(JScrollPa nescroller = new JScrollPa ne(helpText);JOptio nPan e.showMessageDialog( null,scroller);}});bar.add(helpMenu); //添加4.4设计成果4.4.1运行界面L 事林岡稱[章规卜]★聲e ▼自赭擠彳了(MO0& C £>■ o设于Wir * 电事本(Notepad)fl'JJava程序。