简单计算器的功能实现

来源:互联网 发布:音视频转换器mac 编辑:程序博客网 时间:2024/05/22 03:51

欢迎来到本博客,我是刚刚码完代码,现在正在写博客,下一秒就不知道干什么的宅男川哥儿奋斗。好废话不多说了,今天我给大家讲解一下简单计算器的具体功能实现,首先我们先讲解一下具体的实现思路,然后结合代码具体分析:

一、计算器功能实现的整体思路:

      1、创建一个窗体,窗体要采用边框布局borderlayout,最后是窗体的具体实现。

      2、在窗体中添加上下两个面板,分别叫做CounterUP和CounterDown。CounterUP为文本框面板,存放文本栏,CounterDown是按钮面板,添加相应的按钮。

      3、给按钮加监听并实现相应的功能,在这里我们会用到ActionListener监听器,由于按钮过多我会用到switch-case判断方法。

      4、功能的实现,以加法为例:

         (1)当我们没有点击加号按钮时我们通过JTextArea的append()方法讲我们要输入的第一个数显示出来;

         (2)点击加号,通过JTextArea的getText()方法获得先前输入的第一个数值存入sm1,并且清空文本栏,记住这一步很重要,因为这步关系到取第二个数。

         (3)点击等于号时,执行加号运算并且通过JTextArea的getText()方法获得第二个数即等于号之前的数,记作sm,最后通过JTextArea的setText()方法输出sm与sm1的和,即最终结果。

         (4)其他运算符的功能实现与加法类似。

     5、程序代码及注释:

(1)主函数类

package 计算器2;public class Text { public static void main(String[] args) {       Calculator cal=new Calculator();       cal.ShowUI();}}

(2)计算器类(Calculator)

package 计算器2;import java.awt.BorderLayout;import java.awt.Component;/* * 计算器类 */import javax.swing.JFrame;public class Calculator extends JFrame{     public void ShowUI(){     this.setTitle("简单计算器");     this.setSize(350, 550);     this.setLocationRelativeTo(null);     this.setDefaultCloseOperation(3);     this.setResizable(false);     //在这个窗体中加入一个边框布局     BorderLayout bl=new BorderLayout();     this.setLayout(bl);     //创建文本框面板,并将其放置在边框布局中的最上方     CounterUP cu=new CounterUP();     this.add(cu,BorderLayout.NORTH);     //创建按钮面板,并将其放置在边框布局的最下面     CounterDown cd=new CounterDown();     this.add(cd, BorderLayout.SOUTH);     this.setVisible(true);     }}

(3)文本栏面板类(CounterUP)

package 计算器2;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import javax.swing.JPanel;import javax.swing.JTextArea;public class CounterUP extends JPanel{public static JTextArea jta;      public CounterUP(){      this.addUP();      }      private void addUP() {    //更换字体        Font font=new Font(TOOL_TIP_TEXT_KEY, ALLBITS, ALLBITS);this.setPreferredSize(new Dimension(350,120));//添加文本框    jta=new JTextArea();    //字体的具体实现    jta.setFont(font);this.add(jta);jta.setPreferredSize(new Dimension(340, 115));  }}

(4)按钮面板类(CounterDown)

package 计算器2;import java.awt.Button;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import javax.swing.JPanel;public class CounterDown extends JPanel{public CounterDown(){this.addDown();}private void addDown() {this.setPreferredSize(new Dimension(350, 400));//添加字体Font font=new Font("Courier", Font.BOLD, 25);//添加棋盘布局GridLayout gl=new GridLayout(5,4);this.setLayout(gl);/******添加按钮*******/String[] button={"二次方","三次方","开平方","清零",         "1","2","3","+","4","5","6",         "-","7","8","9","*",".","0",         "=","/"};    //特别注意这个监听一定要在遍历数组前面创建CounterLisener ml=new CounterLisener();for (int i = 0; i < button.length; i++) {Button bt=new Button(button[i]);bt.addActionListener(ml);//字体的更换实现        bt.setFont(font);this.add(bt);}}}

(5)监听及功能实现(CounterLisener)

package 计算器2;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class CounterLisener implements ActionListener{    private int Tipy;    //定义为双精度是因为方便小数的运算,使程序的功能更加全面    private Double sm;    private Double sm1;public void actionPerformed(ActionEvent e) {    String comand=e.getActionCommand();switch (comand) {case "0":case "1":case "2":case "3":case "4":case "5":    case "6":case "7":case "8":case "9":case ".": CounterUP.jta.append(comand); break;    /******运算符模块************/case "+":   Tipy=1;   sm1=Double.parseDouble(CounterUP.jta.getText());   //获取加号前面的数后将文本栏清空方便后面的读取   CounterUP.jta.setText("");   break;case "-":   Tipy=2;   sm1=Double.parseDouble(CounterUP.jta.getText());   //获取减号前面的数后将文本栏清空方便后面的读取   CounterUP.jta.setText("");   break;case "*":   Tipy=3;   sm1=Double.parseDouble(CounterUP.jta.getText());   //获取乘号前面的数后将文本栏清空方便后面的读取   CounterUP.jta.setText("");   break;case "/":   Tipy=4;   sm1=Double.parseDouble(CounterUP.jta.getText());   //获取除号前面的数后将文本栏清空方便后面的读取   CounterUP.jta.setText("");   break;case "二次方":   Tipy=5;   sm1=Double.parseDouble(CounterUP.jta.getText());   break;case "三次方":   Tipy=6;   sm1=Double.parseDouble(CounterUP.jta.getText());   break;case "开平方":   Tipy=7;   sm1=Double.parseDouble(CounterUP.jta.getText());   break;    /*****运算块,当点击等号键时程序才会运算*********/case "="://根据Tipy的值判断点击等号之后该执行什么样的运算switch (Tipy) {case 1:sm=Double.parseDouble(CounterUP.jta.getText());sm=sm+sm1;CounterUP.jta.setText(""+sm);break;            case 2:            sm=Double.parseDouble(CounterUP.jta.getText());sm=sm1-sm;CounterUP.jta.setText(""+sm);break;            case 3:            sm=Double.parseDouble(CounterUP.jta.getText());sm=sm*sm1;CounterUP.jta.setText(""+sm);break;                        case 4:            sm=Double.parseDouble(CounterUP.jta.getText());sm=sm1/sm;CounterUP.jta.setText(""+sm);break;            case 5:            sm=sm1*sm1;            CounterUP.jta.setText(""+sm);            break;            case 6:            sm=sm1*sm1*sm1;             CounterUP.jta.setText(""+sm);            break;            case 7:            sm=Math.sqrt(sm1);            CounterUP.jta.setText(""+sm);            break;default:break;}   break;//清零既是将文本栏清空case "清零" :CounterUP.jta.setText("");break;default:break;}}}

6、以上就是我所做的一个简单计算器,如果程序还有什么需要完善的地方,希望大家能够提粗来并且完善它。

1 0