实验:计算器java程序班级:XXXXXXX姓名:XXXXX学号:XXXXXXXX实验地点:XXXXX一、实验目的:通过制作一个计算器让我们了解到组件的运用以及如何制作一个窗口,怎么样使用各种布局管理器,怎么样注册事件的监听,以及怎么样设置按钮或者说组件的监听程序,学会使用java语言的语法规则,掌握接口的使用,了解组建的背景颜色的设置等方法。二、实验要求:1.编写一个java计算器程序;2.运用组件的方法来布局窗口,运用接口,事件监听程序来完成计算器的功能。三,实验步骤1、新建一个类,注册各种组件;2、获取窗格;设置布局管理器;3、为各个组件注册监听程序;4、设置组件的事件监听程序;5、运行程序,对结果进行截图;四,设计思路:1.界面设置布置模块:使用了awt,swing的类里面的方法来完成界面的布置。其中,容器布置选择了BorderLayout方法来布置面板,选择了GirdLayout方法来布置按钮。文本区域接收字符从数字按钮的监听中获得。按钮是常规思路添加到面板上。并为按钮注册监听。2.监听程序思路:使用tf.getText()+n来实现获得文本区域显示按钮字符串,n等于所设置监听的数字按钮。tf.setText()来保存并输出获得的字符串。使用Double.parseDouble()实现文本区域字符串转换成Double型数据来完成计算。把ft.setText()中的字符转换成数字。使用biaozhi==n。的方法来获得启发值。完成运算符按钮的监听。构造方法,运用biaozhi=n,来完成加减乘除小数点的不同运算。运算后获得结果flag3。ft.setText()获得值显示在文本区域上3.数字按钮输入使用循环会更加简单,减少了十个数字按钮的逐个输入,添加,注册监听for(inti=0;i=9;i++){btn[i]=newButton(String.valueOf(i));centerPanel.add(btn[i]);btn[i].addActionListener();}五,程序实现:packageyyy;importjava.awt.BorderLayout;//导入边界布局管理器类importjava.awt.Button;importjava.awt.GridLayout;//导入网格布局管理器类importjava.awt.TextField;//导入文本区域类importjava.awt.event.ActionEvent;//导入事件类importjava.awt.event.ActionListener;//导入事件监听者类importjavax.swing.JButton;//导入按钮类importjavax.swing.JFrame;//导入窗体importjavax.swing.JPanel;//导入面板publicclassjisuanqi8{//新建对象,在构造函数中进行初始化JFramef;//新建窗体对象JButtonbuttonzero,buttondot,buttonequal;//新建按钮“0”“.”“=”JButtonbuttonplus,buttonminus,buttonmultiple,buttondevision,buttontozero;//新建按钮“+”“-”“*”“/”和归零按钮JPanelpanelwest,panelcenter,paneleast,centerPanel;//新建三个面板TextFieldtf;//新建文本区域对象privateButton[]btn=newButton[15];publicjisuanqi8(){//初始化对象tf=newTextField(30);//构造空文本字段,字符宽度为30f=newJFrame(简单计算器);//构造窗体对象,名称为“简单计算器”panelcenter=newJPanel();//构造面板,放到窗体中央panelwest=newJPanel();//构造面板,放到窗体西边paneleast=newJPanel();//构造面板,放到窗体东边Handleh=newHandle();//新建Handle类对象,Handle类为事件监听类//构造按钮“0”“.”“=”,注册事件监听器,设置1行3列的布局,添加到到西边的面板buttonzero=newJButton(0);buttondot=newJButton(.);buttonequal=newJButton(=);buttonzero.addActionListener(h);buttondot.addActionListener(h);buttonequal.addActionListener(h);panelwest.setLayout(newGridLayout(3,1));panelwest.add(buttonzero);panelwest.add(buttondot);panelwest.add(buttonequal);//构造操作按钮“+”“-”“*”“/”“sin”“0”,其中“0”为归零按钮buttonplus=newJButton(+);buttonminus=newJButton(-);buttonmultiple=newJButton(*);buttondevision=newJButton(/);buttontozero=newJButton(归零);paneleast.setLayout(newGridLayout(3,1));//设置西边的布局为3行1列//将操作按钮“+”“-”“*”“/”“sin”“0”添加到西边的面板中paneleast.add(buttonplus);paneleast.add(buttonminus);paneleast.add(buttonmultiple);paneleast.add(buttondevision);paneleast.add(buttontozero);//为操作按钮“+”“-”“*”“/”“sin”“0”注册监听器buttonplus.addActionListener(h);buttonminus.addActionListener(h);buttonmultiple.addActionListener(h);buttondevision.addActionListener(h);buttontozero.addActionListener(h);f.setLayout(newBorderLayout());//设置窗体为边界布局f.add(paneleast,East);//将东边面板paneleast添加到窗体的东边f.add(tf,BorderLayout.NORTH);//将tf文本区域添加到窗体的北边,即顶部f.add(panelwest,BorderLayout.WEST);//将panelwest面板添加到窗体西边f.add(panelcenter,BorderLayout.CENTER);//将panelcenter面板添加到窗体中间f.pack();//设置窗体大小,适合其子组件的首选大小和布局f.setLocation(500,500);//设置窗体显示位置为(500,500)f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置布局窗体默认关闭方式f.setVisible(true);//设置窗体可见for(inti=0;i=9;i++){btn[i]=newButton(String.valueOf(i));centerPanel.add(btn[i]);btn[i].addActionListener(h);}}publicstaticvoidmain(String[]args){newjisuanqi7();//主方法中新建对象}classHandleimplementsActionListener{//实现动作监听器类intbiaozhi=0;//此标志标志加减乘除操作doubleflag1=0,flag2=0,flag3=0;//flag1、flag2为两个操作数,flag3为结果@OverridepublicvoidactionPerformed(ActionEvente){//方法重写try{//此处可能会产生异常,用try、catch捕捉异常,不用处理if(e.getSource()==buttondot){//小数点tf.setText(tf.getText()+.);}if(e.getSource()==buttontozero){//归零操作tf.setText();}elseif(e.getSource()==btn){//按键9操作tf.setText(tf.getText()+i);flag1=Double.parseDouble(tf.getText());}if(e.getSource()==buttonplus){//加法操作tf.setText();flag2=flag1;biaozhi=0;}if(e.getSource()==buttonminus){//减法操作tf.setText();flag2=flag1;biaozhi=1;}if(e.getSource()==buttonmultiple){//乘法操作tf.setText();flag2=flag1;biaozhi=2;}if(e.getSource()==buttondevision){//除法操作tf.setText();flag2=flag1;biaozhi=3;}if(e.getSource()==buttonequal){//等号操作,利用biaozhi判断进行相应加减乘除操作if(biaozhi==0){flag3=flag1+flag2;}if(biaozhi==1){flag3=flag1-flag2;}if(biaozhi==2){flag3=flag1*flag2;}if(biaozhi==3){flag3=flag1/flag2;}tf.setText(flag3+);}}catch(Exceptionex){}}}}六、实验结果截图输入5555:使用除法。输入66:获得结果:输入6.44:使用乘法输入5.22获得结果: