实验:计算器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 (int i=0;i<=9;i++){btn[i]=new Button(String.valueOf(i));centerPanel.add(btn[i]);btn[i].addActionListener();}五,程序实现:package yyy;import java.awt.BorderLayout;//导入边界布局管理器类import java.awt.Button;import java.awt.GridLayout;//导入网格布局管理器类import java.awt.TextField;//导入文本区域类import java.awt.event.ActionEvent;//导入事件类import java.awt.event.ActionListener;//导入事件监听者类import javax.swing.JButton;//导入按钮类import javax.swing.JFrame;//导入窗体import javax.swing.JPanel;//导入面板public class jisuanqi8{//新建对象,在构造函数中进行初始化JFrame f;//新建窗体对象JButton buttonzero,buttondot,buttonequal;//新建按钮“0”“.”“=”JButton buttonplus,buttonminus,buttonmultiple,buttondevision, buttontozero;//新建按钮“+”“-”“*”“/”和归零按钮JPanel panelwest,panelcenter,paneleast,centerPanel;//新建三个面板 TextField tf;//新建文本区域对象private Button[] btn=new Button[15];public jisuanqi8(){//初始化对象tf=new TextField(30);//构造空文本字段,字符宽度为30f =new JFrame("简单计算器");//构造窗体对象,名称为“简单计算器”panelcenter=new JPanel();//构造面板,放到窗体中央panelwest=new JPanel();//构造面板,放到窗体西边paneleast=new JPanel();//构造面板,放到窗体东边Handle h=new Handle();//新建Handle类对象,Handle类为事件监听类//构造按钮“0”“.”“=”,注册事件监听器,设置1行3列的布局,添加到到西边的面板buttonzero=new JButton("0");buttondot=new JButton(".");buttonequal=new JButton("=");buttonzero.addActionListener(h);buttondot.addActionListener(h);buttonequal.addActionListener(h);panelwest.setLayout(new GridLayout(3,1));panelwest.add(buttonzero);panelwest.add(buttondot);panelwest.add(buttonequal);//构造操作按钮“+”“-”“*”“/”“sin”“>0”,其中“>0”为归零按钮buttonplus=new JButton("+");buttonminus=new JButton("-");buttonmultiple=new JButton("*");buttondevision=new JButton("/");buttontozero=new JButton("归零");paneleast.setLayout(new GridLayout(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(new BorderLayout());//设置窗体为边界布局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 (int i=0;i<=9;i++){btn[i]=new Button(String.valueOf(i));centerPanel.add(btn[i]);btn[i].addActionListener(h);}}public static void main(String[] args) {new jisuanqi7();//主方法中新建对象}class Handle implements ActionListener{//实现动作监听器类int biaozhi=0;//此标志标志加减乘除操作double flag1=0,flag2=0,flag3=0;//flag1、flag2为两个操作数,flag3为结果@Overridepublic void actionPerformed(ActionEvent e) { //方法重写try{//此处可能会产生异常,用try、catch捕捉异常,不用处理if(e.getSource()==buttondot){//小数点tf.setText(tf.getText()+".");}if(e.getSource()==buttontozero){//归零操作tf.setText("");}else if(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(Exception ex){ }}}}六、实验结果截图输入5555:使用除法。