JAVA语言编写计算器和文档编辑器.doc_第1页
JAVA语言编写计算器和文档编辑器.doc_第2页
JAVA语言编写计算器和文档编辑器.doc_第3页
JAVA语言编写计算器和文档编辑器.doc_第4页
JAVA语言编写计算器和文档编辑器.doc_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计设计题目: java语言编写计算器和文档编辑器 学生姓名: 李伟 学 号: 20105378 专业班级: 电子商务10-1班 指导教师: 聂会星 程八一 惠刚 靳鹏 方芳 2011 年 12 月 12 日计算器制作一、实验目的1、为了加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及java语言程序设计的规律与技巧,为进一步学习java高级应用及今后从事专业工作打下基础。2、在对java程序的调试过程中,提高分析程序中出现的错误和排除这些错误的能力。通过上机实践,加深学生对计算机软件运行环境,以及对操作系统与计算机语言支持系统相互关系的了解。3、熟悉java开发工具,运行java应用程序和小程序;掌握java程序的编辑、编译、运行。掌握各种数据类型及其使用方法;掌握表达式的组成;理解定义变量的作用,掌握定义变量的方法;掌握各种运算符的使用及其优先级控制。学习结构化程序设计的分支结构及分支语句的使用;学习使用结构化程序设计的循环结构及循环语句的使用;掌握数组的使用方法,着重掌握二维数组,编写使用二维数组的程序;掌握常用字符串类、方法。4、学会类的定义和对象的使用;封装、继承、多态的应用;如何创建包,编译、运行包中的类;方法的覆盖和重载;抽象类、接口、内部类的使用。掌握异常处理的使用方法。着重掌握基本的gui组件;掌握容器布局管理;掌握事件处理机制。二、实验要求计算器要有gui界面,用户可以输入所需计算的数值,可以进行加、减、乘、除四种最基本的运算,可以求一个数值的平方及倒数,可以进行阶乘运算,要能运算小数,并且不会产生精度损失,在必要情况下,可以进行四舍五入的运算。允许正负数间的运算。三、实验内容通过创建一个框架并在框架上加上适当的按钮以及文本框并通过对按钮设置监听器以达到进行运算的目的,由于对java知识掌握的不多还需要通过参阅书本来完成,我们小组有三个人,我负责做算法部分,其他两人负责界面布局以及监听器的设置。在实验过程中,我们共同合作每个人都参加了所有程序的编写过程。四、实验步骤1、首先要声明包。主要用到了以下几个包:import java.awt.*;import java.awt.event.*;import javax.swing.*;导入了包之后就可以运用包中的类了。2、创建框架。以下用borderframe类构造frame函数,然后设置框架的格式为最小化、最大化、关闭。然后show的作用是显示该框架。borderframe frame = new borderframe();frame.setdefaultcloseoperation(jframe.exit_on_close);frame.show();3、编写borderframe类,定义各个变量。class borderframe extends jframe implements actionlistener这里要用到actionlistener接口,是下面监听器所需要的。定义变量例如下面代码:private jbutton num0,dao,gen,ss,bac;public double d,d11; public double jieguo; public boolean end=true;而在实际编写过程中我是用到一个定义一个。4、定义各组件,在框架上加入各种组件。接下来是定义按钮num0=new jbutton(0);括号里的即为按钮显示的信息。依次再创建23个按钮。刚开始在borderframe()方法里我使用jbutton num0=new jbutton(0)来定义按钮,后来发现在actionperformed方法里不能使用这些按钮,所以要在borderframe这个类中定义,jbutton num0;这样就能被borderframe类里的所有方法采用而不会出现未定义的错误。在布局的时候为了防止颜色单调,将按钮背景颜色设置为白色,采用setbackground()方法,具体代码如下:num0.setbackground(color.white);这样依次设置12个按钮,其他按钮仍为默认颜色。接着创建buttons面板方法如下:buttons=new jpanel();接着把所有的按钮加到buttons面板程序代码如下:buttons.add(num0);然后依次把所有按钮加入即可。在布局的时候采用了setlayout 方式布局具体代码如下:buttons.setlayout(new gridlayout(6,4,5,5);后面的四个数分别是6行4列,间隙的高5宽5。这样之后布局如下接着编写文本框并将文本域设置为不可编辑,代码如下resulttext= new jtextfield(, 25);resulttext.setenabled(false);然后将文本域加入到text面板中具体代码如下:jpanel text=new jpanel();text.add(resulttext);之后再将面板加入到内容窗格布局中具体代码如下:container contentpane = getcontentpane();contentpane.add(text, borderlayout.north);contentpane.add(buttons, borderlayout.center);在计算器制作过程中为了使界面更加人性化,并为使用者提供一些制作信息我们小组特意加入了菜单栏。首先创建菜单栏并将菜单栏加入到框架中具体代码如下:jmenubar mainmenu = new jmenubar(); setjmenubar(mainmenu); 接着创建三个主菜单名字分别为文件、颜色、作者具体代码如下: jmenu actmenu = new jmenu(文件); jmenu setcolormenu = new jmenu(颜色); jmenu aboutmenu = new jmenu(作者); mainmenu.add(actmenu); mainmenu.add(setcolormenu); mainmenu.add(aboutmenu); 接下来分别向各个主菜单中加入子菜单具体代码如下tuichu = new jmenuitem(退出); actmenu.add(tuichu); banquan = new jmenuitem(版权); aboutmenu.add(banquan); chanpin = new jmenuitem(产品信息); aboutmenu.add(chanpin); hongse = new jmenuitem(红色); setcolormenu.add(hongse); lanse = new jmenuitem(蓝色); setcolormenu.add(lanse); huise = new jmenuitem(灰色); setcolormenu.add(huise);菜单显示如下图所示:5、创建监听器每个按钮都是事件源,我们对按钮设置监听器后,只要该按钮发生一个事件(actionevent),listenter对象就是接到通知。我们设置监听器的方法如下所示:num9.addactionlistener(this); num8.addactionlistener(this); num7.addactionlistener(this); num6.addactionlistener(this); num5.addactionlistener(this); num4.addactionlistener(this); num3.addactionlistener(this); num2.addactionlistener(this); num1.addactionlistener(this); num0.addactionlistener(this); plu.addactionlistener(this); min.addactionlistener(this); mul.addactionlistener(this); div.addactionlistener(this); equ.addactionlistener(this); cle.addactionlistener(this); jiecheng.addactionlistener(this); youk.addactionlistener(this); dian.addactionlistener(this); zf.addactionlistener(this); dao.addactionlistener(this); gen.addactionlistener(this); ss.addactionlistener(this);bac.addactionlistener(this);在这里,所有的按钮共享一个监听器对象。所以在actionperformed方法中,必须判断那个按钮被按下,即事件源,可以通过eventobject类的getsource方法来判断。接着对菜单也设置了监听器如下:banquan.addactionlistener(this);zhizuodi.addactionlistener(this);hongse.addactionlistener(this);lanse.addactionlistener(this);huise.addactionlistener(this);tuichu.addactionlistener(this);chanpin.addactionlistener(this);这样所有的监听器就制作好了。6、编写actionperformed方法在actionperformed方法里包括了所有按钮以及子菜单的点击事件,包括了所有的算法。首先设置点banqun菜单后,将会弹出一个showconfirmdialo型对话框,里面的按钮是default_option类型,标题是“版权雷神牌计算器”,对话框里的内容是 刘晓雷 20095406;李伟20095378;周洪芬20095379 具体代码如下:if (source=banquan) int selection=joptionpane.showconfirmdialog( borderframe.this, 刘晓雷 20095406;李伟20095378;周洪芬20095379 ,版权雷神牌计算器, joptionpane.default_option); 接着编写chanpin菜单即作者信息的事件,当点击作者信息时会弹出如下对话框:当点击确定后会弹出另一个对话框如图:代码如下if (source=chanpin) int selection=joptionpane.showconfirmdialog( borderframe.this, 雷神出品必为精品 ,雷神牌计算器, joptionpane.default_option); if (source=chanpin) int selection=joptionpane.showconfirmdialog( borderframe.this, 谢谢使用,雷神牌计算器, joptionpane.default_option); 可以看出就是将source判断两次是否等于chanpin,这样当第一个对话框执行完之后就会弹出第二个对话框以达到效果。接着设置tuichu菜单的事件,当点击退出时会出现如下对话框:如果点击了确定就会退出,点击了撤销就会回到原界面代码如下:if (source=tuichu) int selection = joptionpane.showconfirmdialog(borderframe.this,确定退出么?, 退出?, joptionpane.ok_cancel_option,joptionpane.warning_message); if (selection = joptionpane.ok_option) system.exit(5); system.exit(5)语句就是退出框架的意思,括号里的可以为任意值,消息类型为warning_message可以看出与上面两个对话框不同的是对话框里有了警告的提示。设置完之后设置颜色菜单的事件如下:if (source=lanse) buttons.setbackground(color.blue); if (source=hongse) buttons.setbackground(color.red); if (source=huise) buttons.setbackground(color.lightgray); setbackground就是设置背景颜色的函数,这样就达到了改变背景颜色的目的。接下来就进入计算阶段的编写了,首先要达到点击数字按钮,文本框里会显示数字如下所示:if(source=num0)t=resulttext.gettext()+0;resulttext.settext(t);if(source=num1)t=resulttext.gettext()+1;resulttext.settext(t); if(source=num2)t=resulttext.gettext()+2;resulttext.settext(t); if(source=num3)t=resulttext.gettext()+3;resulttext.settext(t); if(source=num4)t=resulttext.gettext()+4;resulttext.settext(t); if(source=num5)t=resulttext.gettext()+5;resulttext.settext(t); if(source=num6)t=resulttext.gettext()+6;resulttext.settext(t); if(source=num7)t=resulttext.gettext()+7;resulttext.settext(t); if(source=num8)t=resulttext.gettext()+8;resulttext.settext(t); if(source=num9)t=resulttext.gettext()+9;resulttext.settext(t);resulttext.gettext()就是获取文本框中的字符串,resulttext.settext(t)就是使文本框中显示字符串t;这样就可以在文本框中输入数字了如下图所示:7、我的算法。接下来进行算法的编写,算法编写主要是我编写的,这些算法不是一下子就能想出来的,而是一步步不断完善而成的,我相信如果有时间我会更加完善我的算法的。加法的代码如下:if(source=plu) if(z!=1) c5=1; c1=double.parsedouble(resulttext.gettext().trim(); end=false;z=0; if(z=1) c5=1;c1=jieguo; z=0; 这里z值就是判断变量用来判断=是否执行过的,end就是用来清空文本框的,c5就是控制变量用来判断是否执行过+运算。=的代码如下:if(source=equ) if(c10!=0) jieguo=1;for(int i=1;i=c9;i+) jieguo=i*jieguo; t=(+jieguo);c10=0; if(c5!=0.0) d=double.parsedouble(resulttext.gettext().trim(); jieguo=c1+d; t=(+jieguo); c5=0; if(c6!=0.0) d=double.parsedouble(resulttext.gettext().trim(); jieguo=c2-d; t=(+jieguo); c6=0; if(c7!=0.0) d=double.parsedouble(resulttext.gettext().trim(); jieguo=c3*d; t=(+jieguo); c7=0; if(c8!=0.0) d=double.parsedouble(resulttext.gettext().trim(); jieguo=c4/d; t=(+jieguo); c8=0; if(c12!=0.0) d=double.parsedouble(resulttext.gettext().trim(); jieguo=1; for(int i=1;i=d;i+) jieguo=c11*jieguo; t=(+jieguo); c12=0; end=false; resulttext.settext(t); z=1; 其中从c5到c8还有c10都是控制变量用来判断带年纪过哪一个运算符。用一个加法来讲解我的流程,点击顺序9+72=+3=首先点击9这个按钮,接着文本框中就会显示9,点击+后因为z初值为零,所以就获取了文本框中的数值c1=9,然后控制变量c5=1,end=false。文本框中仍然显示着9。接着进行下一个循环,当点击按钮时下一个循环才会进行也就是说看不到清零过程,点7按钮,接着有一个end=true语句,然后点击2文本框中显示72,然后点击=号,此时执行if语句中的c5!=0,d=72,结果=81,end=false,z=0,显示81,当点击+时,c1=jieguo即81,end=false,点击3继续清零,文本框中显示3,点=,结果就是84。还有一些其他的运算都很简单,详见源代码。这样就完成了计算器的编写。五、实验结果输入5.2执行四舍五入运算求9+72+3结果点击9+72=+3=点击9,点击完+号后:接着点击7点击2点击=接着点击+3点击加号的时候会出现清零过程,接着点击=这样就完成了运算结果,点击四舍五入按钮后如下:文本编辑器一、实验目的:综合掌握java编程技巧及java开发环境。二、实验要求:可以设置文本的字体、大小、颜色等基本参数,可以读取计算机中txt文件,可以生成一个新的txt文件。其他功能参照windows的文本编辑器。三、实验内容通过创建一个框架并在框架上加上适当的菜单栏以及文本域并通过对菜单设置监听器以达到进行字体大小颜色的控制,由于对java知识掌握的不多还需要通过参阅书本来完成,我们小组有三个人,我负责做算法部分,其他两人负责界面布局以及监听器的设置。在实验过程中,我们共同合作每个人都参加了所有程序的编写过程。四、实验步骤1、声明包import java.awt.font.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;其中java.io是提供输入流输出流控制。2、创建框架。以下用listframe类构造frame函数,然后设置框架的格式为最小化、最大化、关闭。然后show的作用是显示该框架。listframe frame = new listframe();frame.setdefaultcloseoperation(jframe.exit_on_close);frame.show();3、编写listframe类,定义各个变量。class listframe extends jframe implements actionlistener这里要用到actionlistener接口,是下面监听器所需要的。定义并初始化如下:public string dax=5,10,15,20,25,30,35,40,.; 定义列表框并初始化: public jcombobox box=new jcombobox(dax);public static final int width =500;public static final int height = 450;public static final string checkedlabel=you choosed: nindex, coursen; public string t=null;public jtextarea mytextarea;private jlist courselist;private jpanel listpanel;dialog tanchu=new dialog(this);public button que=new button(确定);public jcheckboxmenuitem toolitem,statusitem ;jlabel tishi=new jlabel(字体大小:);public jmenuitem jianqie,niantie,fuzhi,banquan,hongse,lanse,huise,heise,tuichu,chengse,luse,shezhi,xinxi; public jmenuitem zhizuodi,songti,heiti,kaiti,lishu,youyuan,dakai,baocun,lingcun,item11,item12,item13;filedialog open=new filedialog(this,打开.);filedialog save=new filedialog(this,另存为.,filedialog.save);int shifulingcun; jpopupmenu menu;而在实际编写过程中我是用到一个定义一个,而不是一起定义的。4、定义各组件,在框架上加入各种组件。创建文本域,并将文本域加入到滚动条中,创建面板,并将带有文本域的滚动条加入到面板中,具体代码如下:container contentpane = getcontentpane();jpanel textpanel = new jpanel();mytextarea = new jtextarea( 21, 43);jscrollpane textscrollpane = new jscrollpane(mytextarea);textpanel.add(textscrollpane);contentpane.add(textpanel);创建菜单栏,并创建四个主菜单,分别为四个主菜单设置快捷键jmenubar mainmenu = new jmenubar(); setjmenubar(mainmenu); jmenu actmenu = new jmenu(文件(a); jmenu bianmenu = new jmenu(编辑(b); jmenu setcolormenu = new jmenu(颜色(s); jmenu aboutmenu = new jmenu(作者(c); jmenu daxmenu = new jmenu(大小(d); jmenu zitmenu = new jmenu(字体(e); actmenu.setmnemonic(a);bianmenu.setmnemonic(b);setcolormenu.setmnemonic(s);aboutmenu.setmnemonic(c);daxmenu.setmnemonic(d);zitmenu.setmnemonic(e);定义子菜单并将子菜单加入到主菜单中并设置加速器:dakai = new jmenuitem(打开(l); actmenu.add(dakai);dakai.setaccelerator(keystroke.getkeystroke(keyevent.vk_l, inputevent.ctrl_mask);lingcun = new jmenuitem(另存为(y); 这个的加速器是ctrl+l当按下ctrl+l时就是点击了该子菜单。actmenu.add(lingcun);创建单选框并将单选框加入到子菜单中:toolitem = new jcheckboxmenuitem (自动换行);statusitem = new jcheckboxmenuitem (取消自动);buttongroup group =new buttongroup();group.add(toolitem);group.add(statusitem);optionmenu.add(toolitem);optionmenu.add(statusitem);bianmenu.add(optionmenu);还有其他的许多子菜单的定义方法如上详见源代码。定义三个子菜单和一个弹出式菜单,将三个子菜单加入到弹出菜单中item11=new jmenuitem(复制); item12=new jmenuitem(粘贴); item13=new jmenuitem(剪切);menu=new jpopupmenu(); menu.add(item11); menu.add(item12); menu.add(item13);5、设置鼠标右键当点击鼠标右键时弹出菜单:mytextarea.addmouselistener(new mouseadapter() public void mousepressed(mouseevent e) if(e.getmodifiers()=inputevent.button3_mask) menu.show(mytextarea,e.getx(),e.gety(); );6、设置监听器每个按钮都是事件源,我们对按钮设置监听器后,只要该按钮发生一个事件(actionevent),listenter对象就是接到通知。我们设置监听器的方法如下所示:lingcun.addactionlistener(this);baocun.addactionlistener(this);tuichu.addactionlistener(this);dakai.addactionlistener(this);banquan.addactionlistener(this);xinxi.addactionlistener(this);zhizuodi.addactionlistener(this);hongse.addactionlistener(this);lanse.addactionlistener(this);huise.addactionlistener(this);heise.addactionlistener(this);chengse.addactionlistener(this);luse.addactionlistener(this);zitmenu.addactionlistener(this);songti.addactionlistener(this);heiti.addactionlistener(this);kaiti.addactionlistener(this);lishu.addactionlistener(this);youyuan.addactionlistener(this);daxmenu.addactionlistener(this);shezhi.addactionlistener(this);jianqie.addactionlistener(this);niantie.addactionlistener(this);fuzhi.addactionlistener(this);在这里,所有的按钮共享一个监听器对象。所以在actionperformed方法中,必须判断那个按钮被按下,即事件源,可以通过eventobject类的getsource方法来判断。接着对弹出菜单里的子菜单设置监听器:item11.addactionlistener(this); item12.addactionlistener(this); item13.addactionlistener(this);7、设置作者菜单里的子菜单的点击事件。当点击版权子菜单时,先弹出制作人信息,关闭对话框后,接着弹出感谢提示if (source=banquan) int selection=joptionpane.showconfirmdialog( listframe.this, 刘晓雷 20095406;李伟20095378;周洪芬20095379 ,版权, joptionpane.default_option); if (source=banquan) int selection=joptionpane.showconfirmdialog( listframe.this, 感谢观看 ,版权, joptionpane.default_option); 当点击信息时,弹出提示产品信息对话框,代码如下:if (source=xinxi) int selection=joptionpane.showconfirmdialog( listframe.this, 雷神牌记事本 n 雷神出品必为精品 ,产品信息, joptionpane.default_option); 当点击zhizuodi时会提示制作地信息,具体代码如下: if (source=zhizuodi) int selection=joptionpane.showconfirmdialog( listframe.this, 合肥工业大学机房 ,地址, joptionpane.default_option); 8、设置编辑菜单里的子菜单。首先设置两个单选框,这里要用到自动换行的函数.setlinewrap(true)就是自动换行,当参数改成false时就不能自动换行了。具体代码如下:if (source=toolitem) mytextarea.setlinewrap(true); if (source=statusitem) mytextarea.setlinewrap(false); 接着设置剪切,复制粘贴子菜单要用到.cut().copy().paste()函数,具体代码如下: if (source=jianqie) mytextarea.cut(); if (source=fuzhi) mytextarea.copy(); if (source=niantie) mytextarea.paste(); 9、设置颜色菜单的下拉菜单这里要用到.setforeground()函数,当设置完之后字的颜色就是后面参数里的颜色。if (source=hongse) mytextarea.setforeground(color.red); if (source=lanse) mytextarea.setforeground(color.blue); if (source=huise) mytextarea.setforeground(color.gray); if (source=chengse) mytextarea.setforeground(color.orange); if (source=luse) mytextarea.setforeground(color.green); if (source=heise) mytextarea.setforeground(color.black); 10、设置字体菜单的下拉菜单。这里一共设置了五种字体,首先设置字体要用获得文本域中的格式用font f=mytextarea.getfont();就可以获得,然后在设置字体格式时只改变字体其他就可以用f.getstyle(),f.getsize()来表示。具体代码如下:if (source=songti) font f=mytextarea.getfont(); mytextarea.setfont(new font(宋体,f.getstyle(),f.getsize(); if (source=heiti) font f=mytextarea.getfont(); mytextarea.setfont(new font(黑体,f.getstyle(),f.getsize(); if (source=kaiti) font f=mytextarea.getfont(); mytextarea.setfont(new font(楷体,f.getstyle(),f.getsize(); if (source=lishu) font f=mytextarea.getfont(); mytextarea.setfont(new font(隶书,f.getstyle(),f.getsize(); if (source=youyuan) font f=mytextarea.getfont(); mytextarea.setfont(new font(幼圆,f.getstyle(),f.getsize(); 11、设置文件下拉菜单里的功能。当点击退出时会弹出ok_cancel_option形式的对话框,如果选择的是ok就会退出框架,用到了system.exit(0)函数。具体代码如下。if (source=tuichu) int selection = jopti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论