简单计算器的功能实现

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值