欢迎来到本博客,我是刚刚码完代码,现在正在写博客。好废话不多说了,今天我给大家讲解一下简单计算器的具体功能实现,首先我们先讲解一下具体的实现思路,然后结合代码具体分析:
一、计算器功能实现的整体思路:
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、以上就是我所做的一个简单计算器,如果程序还有什么需要完善的地方,希望大家能够提粗来并且完善它。