收藏 分销(赏)

虚拟的java编辑器课程设计报告样本.doc

上传人:二*** 文档编号:4512850 上传时间:2024-09-26 格式:DOC 页数:41 大小:216.54KB
下载 相关 举报
虚拟的java编辑器课程设计报告样本.doc_第1页
第1页 / 共41页
本文档共41页,全文阅读请下载到手机保存,查看更方便
资源描述
虚拟Java编辑器设计报告 一、需求分析 本次课程设计名称为JAVA编辑器。需要设计一种图形界面文本编辑器,能编辑Java语言源程序,界面和功能类似Editplus。 演示程序为计算机和顾客对话形式执行,即在计算机终端显示图形界面文档编辑器,然后顾客就可以实现编辑,保存等像记事本同样功能。 (1)打开以有文献,保存编辑文献,退出编辑器并提示保存; (2)查找编辑区中字符串,用已知字符串替代查找字符串; (3)显示文献存取途径; (4)剪切,复制,粘贴,删除等; (5)变化文本区字体颜色,字体大小和形状功能; (6)核心字显示蓝色、类库类名显示红色。 二. 设计 1. 设计思想 Java编辑器是用来编写java程序源代码。Java程序编辑器是:图形界面、线程、流与文献等技术综合应用。 图形界面实现:就选取了swing来完毕实现,在选取组件上,文本编辑区就选用了JTextPane作为重要部件。 由于Java特性,也许用任何一种编辑器来编辑,于是就将Windows中记事本作为模仿对象,依照实现状况删减了其中某些功能,如自动换行,设立字体,打印等功能。在设计类时候,考虑到简朴明了,一种主类,一种默认属性myfr类,染色类SyntaxHighlighter作为程序整体框架,所有对象和办法都是在默认属性类和染色类中创立和实现,以及为各组件注册事件监听程序也是在默认属性类染色类中实现。本程序主类完毕对象实例化及显示。 2. 功能设计 本程序涉及到了对图形顾客界面设计与实现和菜单设计与实现。顾客可以通过此编辑器对java文献进行文字复制、剪切、粘贴、删除、查找、替代、时间插入、设立字体颜色和核心字、类库名着色等。 本程序重要有如下3个模块构成: (1)主体模块 由窗口、功能菜单、文本框构成。为顾客选取编辑功能提供了简朴、以便界面。Java窗口由JFrame类生成,咱们可以在创立空白窗口上添加组件。菜单是图形顾客界面重要构成某些,是由菜单条(MenuBar)、菜单(Menu)、菜单项(MenuItem)和复选菜单项(Checkbox MenuItem)等对象构成。 (2)功能模块 有文献新建、打开、保存、另存为和退出,文字复制、剪切、粘贴、删除、查找、替代、以及时间插入,为顾客提供了java编辑器基本功能。 (3)染色模块 核心字显示蓝色,类库名显示红色。实现高亮子核心办法 StyledDocument.setCharacterAttributes(int offset,int length,AttributeSet s,boolean replace) 3. 详细设计 本设计重要是模仿windows记事本界面,重要难点是核心字染色算法和查找替代算法。其她某些相对简朴,重要就是某些容器组件组合,布局设立。重要功能都在myfr类中实现。 Java中提供多行文本编辑器有:JTextComponent,JTextArea,JTextPane,JEditorPane等,都可以使用但是由于语法着色中文本要使用各种风格样式,因此这些文本编辑器document要使用StyledDocument. JTextArea使用是PlainDocument,此document不能进行各种格式着色.JTextPane,JEditorPane使用是StyledDocument,默认就可以使用. 为了实现语法着色,可以继承自DefaultStyledDocument,设立其为这些文本编辑器documet,或者也可以直接使用JTextPane,JEditorPane来做. 为了以便,这里就直接使用JTextPane了 (1)主类 class ok 实例化初始化窗口 (2)主窗口体类 class myfr 字体类 class MyFont (3)染色类class SyntaxHighlighter (4)鼠标右键弹出菜单类class handlemouse (5)协助主题类class myhelp (6)关闭窗口XXX类class xxx (7)关闭协助主题窗口类class xxxhelp 三. 调试及测试 1. 调试过程中遇到重要问题及解决办法 开始把染色类写在myfr中,成果浮现继承错误,只得把染色类写在myfr之外,通过引用实现类与类联系。在开始设立字体颜色是浮现问题,核心字可着色,不能设立字体颜色,最后发现时没有监听器位置浮现了问题! 2. 对设计和编码回顾讨论和分析 在本设计中没有用数据库,在直接用哈希表定义,因此只能简朴定义几种惯用核心字、类库名,能阐明功能实现就可以,这也是可以该进地方。设计功能有限,只能实现简朴文本编辑,没有编译,运营等等功能,这也是能力有限。 3.测试数据集 (1)主体模块 定义一种myfr类对象,完毕主类实例化显示。 (2)功能模块 (A)文献(新建、打开、保存、另存为、退出) 功能图如下: (B)编辑(复制、剪切、粘贴、删除、查找、查找下一种、替代、替代下一种、全选、日期/时间) 功能图如下: (C)格式(字体、字体颜色) 功能图如下: (D)格式风格(状态栏) 功能图如下: (E)协助(协助主题、关于) 功能图如下: (F)核心字显示蓝色、类库类名显示红色 功能图如下: 四、经验和体会。 通过本次成功实现了Java文本编辑器设计与编写,我进一步巩固、加深了对专业课程《JAVA语言教程》基本理论知识理解,使我纯熟掌握了JAVA语言输入输出流、数据库连接使用,灵活运用各种类库。本次运用所学知识,开发小型应用系统我掌握了如何运用JAVA语言编写调试应用系统程序,并且训练了我独立开发应用系统,进行数据解决综合能力。同步,对于给定设计题目,如何对其进行分析,理清思路,并给出相应数学模型,也是一项较好考验。 通过对这个课题学习,我发现Java语言作为一种新兴编辑语言,优势很明显,整个程序构造很清晰,让人一目了然。并且,程序编辑、修改、移植性也很强,可以通过对功能模块添加,增长程序实用性,例如查找、替代、打印等等,这些事此后可以进一步研究发展方向。 通过对这个课题训练,使我基本掌握了Java编程基本知识,主体模块与功能模块结合技巧、办法,提高了我自学能力,也锻炼了我分析问题、解决问题能力! 本次课程设计给我印象最深就是,在程序中非常容易出小毛病,而这些小毛病往往挥霍大量时间而不得其解,让人烦恼至极。例如,在主办法体中忘掉定义某些变量,导致程序运营时程序也报出大量错,有时在鼠标随便定位处不小心按下一种字符,成果运营报错后浮现意外错误,有时忘掉保存等等……此后让我懂得写程序一定要仔细,要认真写清每一行代码。 附录:重要源程序 import java.awt.*; import java.awt.event.*; import java.awt.Color; import java.io.*; import java.util.*; import java.util.HashSet; import java.util.Set; import java.awt.datatransfer.*; import java.awt.event.*; import java.text.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.text.Caret; import javax.swing.JFrame; import javax.swing.JTextPane; import javax.swing.SwingUtilities; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; import javax.swing.undo.*; public class ok{ public static void main(String[] args) { myfr fr=new myfr ("我java编辑器"); fr.setSize(600,400); } } ///////////////////////////myfr主窗体类////////////////////////////////////// class myfr extends JFrame implements ActionListener { String str,strnext,path,fname;//某些变量声明 JPanel mainpane; JFileChooser choose = new JFileChooser();//文献对话框 Dialog find,replace;//find为查找对话框,replace对话框 JTextField findtxt,repltxt;//find为查找对话框输入文本区,replace对话框输入文本区 Font newfont; JButton findenter,replb,but;//find为查找对话框,replace对话框拟定按钮 JLabel state=new JLabel("java编辑器------未命名文档");//状态栏 JTextPane txt1;//主输入文本区 File newfiles; JPopupMenu popm;//弹出菜单声明 JMenu m1,m2,m3,m4,m5,m6;//各菜单项 JMenuItem m61,m62,m26,m271,m34,m51,m52,m53,m54,p_copy,p_cut,p_paste,p_del,font; int startp,endp,nexttemp,newstartp,newendp;//查找替代时所用暂时变量 JToolBar toolbar = new JToolBar();//工具条 private Set<String> keywords; private Set<String> classwords; private Style keywordStyle; private Style classwordStyle; private Style normalStyle; myfr(String sss) /////构造函数开始 { super(sss); JMenuBar mb=new JMenuBar(); fname=null;//初始文献名为空 findenter=new JButton("拟定"); findenter.addActionListener(this);//声明对话框中上拟定按钮,并注册事件 replb=new JButton("拟定"); replb.addActionListener(this); mainpane=(JPanel)this.getContentPane(); mainpane.setLayout(new BorderLayout()); txt1=new JTextPane(); txt1.getDocument().addDocumentListener(new SyntaxHighlighter(txt1)); txt1.addMouseListener(new handlemouse(this));//注册鼠标右击事件 txt1.setFont(new Font("宋体",Font.PLAIN,18)); mainpane.add(txt1,BorderLayout.CENTER); mainpane.add("North",toolbar); mainpane.add("South",state); JScrollPane sll = new JScrollPane();//创立滚动条 mainpane.add("Center",sll);; sll.getViewport().add(txt1);//将滚动条装入文本区 popm=new JPopupMenu();////POPMeun 开始 p_copy=new JMenuItem("复制 "); p_copy.addActionListener(this); KeyStroke keycopyp=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK); p_copy.setAccelerator(keycopyp); p_cut=new JMenuItem("剪切 "); p_cut.addActionListener(this); KeyStroke keycutp=KeyStroke.getKeyStroke(KeyEvent.VK_X,Event.CTRL_MASK); p_cut.setAccelerator(keycutp); p_paste=new JMenuItem("粘贴 "); p_paste.addActionListener(this); KeyStroke keypp=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK); p_paste.setAccelerator(keypp); p_del=new JMenuItem("删除 "); p_del.addActionListener(this); KeyStroke keydelp=KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0); p_del.setAccelerator(keydelp); popm.add(p_copy); popm.add(p_cut); popm.add(p_paste); popm.add(p_del); txt1.add(popm);////POPMenu 结束 m1=new JMenu("文献(F)"); m1.setMnemonic('F');//定义快捷方式 JMenuItem m10=new JMenuItem("新建 "); m10.addActionListener(this);//注册事件监听器 KeyStroke keynew=KeyStroke.getKeyStroke(KeyEvent.VK_N,Event.CTRL_MASK);//定义快捷键 m10.setAccelerator(keynew); JMenuItem m11=new JMenuItem("打开 "); m11.addActionListener(this); KeyStroke keyopen=KeyStroke.getKeyStroke(KeyEvent.VK_O,Event.CTRL_MASK); m11.setAccelerator(keyopen); JMenuItem m12=new JMenuItem("保存 "); m12.addActionListener(this); KeyStroke keysave=KeyStroke.getKeyStroke(KeyEvent.VK_S,Event.CTRL_MASK); m12.setAccelerator(keysave); JMenuItem m13=new JMenuItem("另保存为 "); m13.addActionListener(this); JMenuItem m14=new JMenuItem("退出 "); m14.addActionListener(this); KeyStroke keyexit=KeyStroke.getKeyStroke(KeyEvent.VK_F4,Event.ALT_MASK); m14.setAccelerator(keyexit); //////////////////////////////////////////// m2=new JMenu("编辑(E)"); m2.setMnemonic('E'); JMenuItem m21=new JMenuItem("复制 "); m21.addActionListener(this); KeyStroke keycopy=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK); m21.setAccelerator(keycopy); JMenuItem m22=new JMenuItem("剪切 "); m22.addActionListener(this); KeyStroke keycut=KeyStroke.getKeyStroke(KeyEvent.VK_X,Event.CTRL_MASK); m22.setAccelerator(keycut); JMenuItem m23=new JMenuItem("粘贴 "); m23.addActionListener(this); KeyStroke keyp=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK); m23.setAccelerator(keyp); JMenuItem m24=new JMenuItem("删除 "); m24.addActionListener(this); KeyStroke keydel=KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0); m24.setAccelerator(keydel); JMenuItem m25=new JMenuItem("查找 "); m25.addActionListener(this); KeyStroke keyfind=KeyStroke.getKeyStroke(KeyEvent.VK_F,Event.CTRL_MASK); m25.setAccelerator(keyfind); m26=new JMenuItem("查找下一种 "); m26.addActionListener(this); KeyStroke keyfn=KeyStroke.getKeyStroke(KeyEvent.VK_F3,0); m26.setAccelerator(keyfn); m26.setEnabled(false); JMenuItem m27=new JMenuItem("替代 "); m27.addActionListener(this); KeyStroke keyrepl=KeyStroke.getKeyStroke(KeyEvent.VK_H,Event.CTRL_MASK); m27.setAccelerator(keyrepl); m271=new JMenuItem("替代下一种"); m271.setEnabled(false); m271.addActionListener(this); KeyStroke keyrepn=KeyStroke.getKeyStroke(KeyEvent.VK_F6,0); m271.setAccelerator(keyrepn); JMenuItem m28=new JMenuItem("全选 "); m28.addActionListener(this); KeyStroke keyall=KeyStroke.getKeyStroke(KeyEvent.VK_A,Event.CTRL_MASK); m28.setAccelerator(keyall); JMenuItem m29=new JMenuItem("日期/时间 "); m29.addActionListener(this); /////////////////////////////////////////// m3=new JMenu("格式(O)"); m3.setMnemonic('O'); font=new JMenuItem("字体[F]"); font.addActionListener(this); JMenuItem m33=new JMenuItem("字体颜色 "); m33.addActionListener(this); ////////////////////////////////////////// m5=new JMenu("视图风格(V)"); m5.setMnemonic('V'); m54=new JMenuItem("状态栏 "); m54.addActionListener(this); ////////////////////////////////////////// m6=new JMenu("协助(H)"); m6.setMnemonic('H'); m61=new JMenuItem("协助主题 "); m61.addActionListener(this); m62=new JMenuItem("关于 "); m62.addActionListener(this); //添加各项 m1.add(m10);m1.add(m11);m1.add(m12);m1.add(m13);m1.addSeparator();m1.add(m14);m3.add(font); m2.add(m21);m2.add(m22);m2.add(m23);m2.add(m24);m2.addSeparator();m2.add(m25); m2.add(m26);m2.add(m27);m2.add(m271);m2.addSeparator();m2.add(m28); m2.add(m29);m3.add(m33);m5.add(m54);m6.add(m61); m6.addSeparator();m6.add(m62);mb.add(m1);mb.add(m2);mb.add(m3); mb.add(m5);mb.add(m6);this.setJMenuBar(mb);//设立菜单栏 setVisible(true); pack(); show(); this.addWindowListener(new xxx(this)); }///构造函数结束/// ////////////////事件解决///////////////////////////////////// public void actionPerformed(ActionEvent p) { if(p.getActionCommand()=="新建 ") //响应菜单及工具栏事件 { fname=null;//置文献名为空,便于判断文献与否保存过 txt1.setText(""); state.setText(" 我java编辑器------未命名文档"); } if(p.getActionCommand()=="打开 ") { try { if(this.choose.APPROVE_OPTION==this.choose.showOpenDialog(this)) { path=this.choose.getSelectedFile().getPath(); fname=this.choose.getSelectedFile().getName(); File file=new File(path); int flength=(int)file.length(); FileReader fReader=new FileReader(file); char[] data=new char[flength]; fReader.read(data,0,flength); txt1.setText(new String(data)); state.setText(" 我java编辑器------"+path+" 共"+flength+"字节");//状态栏记录文献字节数 txt1.setCaretPosition(0); }} catch(IOException e) {} } if(p.getActionCommand()=="保存 ") { if(fname==null) //如果文献名为空,阐明文献未被创立,弹出另存为对话框 { othersave();} try { File savefile=new File(path); savefile.createNewFile(); FileWriter fw=new FileWriter(savefile); fw.write(txt1.getText()); fw.close(); } catch(IOException e) {} } if(p.getActionCommand()=="另保存为 ") {othersave();} if(p.getActionCommand()=="退出 ") {exit();} //////////////////编辑//////////////////// if(p.getActionCommand()=="复制 ") { txt1.copy();} if(p.getActionCommand()=="剪切 ") { txt1.cut();} if(p.getActionCommand()=="粘贴 ") { txt1.paste();} if(p.getActionCommand()=="删除 ") { txt1.replaceSelection(""); } /////////////////////////////////////////////////////// if(p.getActionCommand()=="查找 ") // 创立查找对话框; {find=new Dialog(this,"查找"); JPanel p1=new JPanel(); JPanel p2=new JPanel(); findtxt=new JTextField(7); p1.add(new JLabel("输入要查找字符:")); p1.add(findtxt); p2.add(findenter); find.add("Center",p1); find.add("South",p2); find.setSize(200,200); find.show(); } if(p.getSource()==findenter) ///点击查找对话框拟定按钮后事件解决 { if(findtxt.getText().equals("")) {find.dispose();} else if(!findtxt.getText().equals("")) { find.dispose(); str=txt1.getText(); startp=str.indexOf(findtxt.getText()); endp=startp+findtxt.getText().length(); txt1.select(startp,endp); m26.setEnabled(true); newendp=endp;////////获取这次查找终点 notfindmethod(); } } ////////////////////////////////////////////////////////// if(p.getActionCommand()=="查找下一种 ") { nexttemp=newendp;/////获取上次查找终点做为未查找字符串起点 String strall=txt1.getText(); txt1.select(nexttemp,strall.length());/////选中所有未查找字符串 strnext=txt1.getSelectedText(); newstartp=strnext.indexOf(findtxt.getText())+nexttemp;/////在未查找字符串里搜索相应字符在TXT1中位置 newendp=newstartp+findtxt.getText().length(); txt1.select(newstartp,newendp);////找到相应文本,并选取 notfindmethod(); } ///////////////////////////////////////////////////////// if(p.getActionCommand()=="替代 ") {m271.setEnabled(true); replace=new Dialog(this,"替代");// 创立替代对话框; JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); findtxt=new JTextField(7); repltxt=new JTextField(7); p1.add(new JLabel("输入原始字符:")); p1.add(findtxt); p2.add(new JLabel("输入替代字符:")); p2.add(repltxt); p3.add(replb); replace.add("North",p1); replace.add("Center",p2); replace.add("South",p3); replace.setSize(200,150); replace.show(); } if(p.getSource()==replb) ///点击替代对话框拟定按钮后事件解决 { replace.dispose(); str=txt1.getText(); startp=str.indexOf(findtxt.getText()); endp=startp+findtxt.getText().length(); txt1.select(startp,endp); txt1.replaceSelection(repltxt.getText()); /*txt1.replaceRange(repltxt.getText(),startp,endp);*/ newendp=endp;///获取这次替代终点 } ////////////////////////////////////////////////// if(p.getActionCommand()=="替代下一种") {nexttemp=newendp;/////获取上次查找终点做为未查找字符串起点 String strall=txt1.getText(); txt1.select(nexttemp,strall.length());/////选中所有未查找字符串 strnext=txt1.getSelectedText(); newstartp=strnext.indexOf(findtxt.getText())+nexttemp;/////在未查找字符串里搜索相应字符在TXT1中位置 newendp=newstartp+findtxt.getText().length(); txt1.select(newstartp,newendp); notfindmethod(); txt1.replaceSelection(repltxt.getText()); /*txt1.replaceRange(repltxt.getText(),newstartp,newendp);//替代字符*/ } if(p.getActionCommand()=="全选 ") {txt1.selectAll();} if(p.getActionCommand()=="日期/时间 ") //用DATE类插入当前日期/时间,编译时会浮现阐明 {txt1.setText(txt1.getText()+Calendar.getInstance().getTime().toString());} //格式// if(p.getSource()==font)//字体 { new MyFont(); } if(p.getActionCommand()=="字体颜色 ") //字体颜色 { JColorChooser jColor=new JColorChooser();//调用颜色面板,设立前景就可更改字体颜色 Color fcolor=txt1.getForeground(); txt1.setForeground( jColor.showDialog(txt1,"选取字体颜色",fcolor)); normalStyle = ((StyledDocument) txt1.getDocument()).addStyle("Keyword_Style",null); StyleConstants.setForeground(normalStyle,fcolor); } //试图风格// if(p.getActionCommand()=="状态栏 ") //状态栏隐藏和显视 {state.setVisible( !(state.isVisible()) );} /////////////////////协助/////////////////////////////////////////// if(p.getActionCommand()=="协助主题 ") {myhelp help=new myhelp(); help.setSize(200,240);} if(p.getActionCommand()=="关于 ") { JLabel prompt=new JLabel("欢迎使用我JAVA编辑器",JLabel.CENTER); JOptionPane.showMessageDialog(null,prompt,"关于我JAVA编辑器",JOptionPane.INFORMATION_MESS
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服