简单计算器的功能实现,无不就是只有“+ - * /”加减乘除 这四个功能,而且同时由于该计算器很简单可以说用“弱智”来形容。为什么呢,因为它每次只能进行单个运算,例如:12*2-1= ,它只能运算2-1 所以最后答案等于1。因为我是在 输入“=”时才实现“=”前的运算符 的运算。
那些界面(ui)设置的什么就不说了,下面我们主要来分析一下简单计算器逻辑实现大概的思路:
1.首先先要想到要实现这些功能需要哪些属性,它要实现运算 那必须得是两个数对吧 所以要定义num1,num2(double),两个数有了那么我要怎么获取它们并且怎么显示,所以又要定义一个字符串s(String)和一个文本框t(JTextField)。当然你获取到的是字符串所以要转换为double类型的数据 num = Double.parseDouble(s); 。到这里基本需要用到的属性都定义的差不多了,后面我们遇到在进行补充定义。
2.比如说我要实现加法运算 我先给文本框里输入一个数 61,那么就将 61赋给num1 (num1 = Double.parseDouble(s);)注意我是在输入运算符之前给num1赋的值。当我又输入运算时 清空文本框(t.setText("");),然后我输入num2的值 再输 “=” 将前面文本框内容清空 然再得出运算结果。那么这个加法功能具体怎么实现,我这里是按照我自己个人的意愿,在输入等号“=”的时候 才进行等号前面还未处理的运算,我给这些运算符 用一个变量 x 来编号0 1 2 3对应+ - * /。然后再在 “=” 功能里面用switch(x)来实现前面我在文本框里面输入的“数 + 运算符 + 数”的运算。
3.在下面代码中我定义了一个btnC (JButton)按钮 该按钮呢就只实现一个简单的功能那就是手动清空文本框。
全部代码如下:
package ui;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class CalculatorUI extends JFrame implements ActionListener{
//属性
JTextField t = null;
JButton btnC;
double num1,num2;
String s;
int x;
public CalculatorUI(){
//设置标题以及窗口大小位置
setTitle("计算器1.0");
setSize(200,300);
setLocationRelativeTo(null); //位置居中
//设置默认的退出方式
setDefaultCloseOperation(EXIT_ON_CLOSE);
//获取内容面板
Container contentpane = this.getContentPane();
//设置布局方式
contentpane.setLayout(new BorderLayout());
//单独处理North布局
JPanel pnlNorth = new JPanel();
pnlNorth.setPreferredSize(new Dimension(0, 60));//设置North布局的大小
pnlNorth.setLayout(new BorderLayout()); //设置North的布局方式为 边界布局
contentpane.add(BorderLayout.NORTH,pnlNorth);
//定义一个文本框 并且加入到North的内容面板的Center区域
t = new JTextField();
t.setFont(new java.awt.Font("宋体",Font.PLAIN,15)); //设置字体为‘宋体’大小为25
pnlNorth.add(BorderLayout.CENTER,t);
//定义一个按钮C(clean)加入到 North 内容面板的 EAST 区域
btnC = new JButton("C");
btnC.setFont(new java.awt.Font("宋体",Font.PLAIN,15)); //设置字体
pnlNorth.add(BorderLayout.EAST,btnC);
//单独处理Center布局
JPanel pnlCenter = new JPanel();
pnlCenter.setLayout(new GridLayout(4,0,3,3)); //设置Center的布局方式为网格布局
contentpane.add(BorderLayout.CENTER,pnlCenter);
String[] member = {
"7","8","9","+",
"4","5","6","*",
"1","2","3","-",
"/","0",".","="
};
btnC.addActionListener(this);
for(int i=0;i<member.length;i++)
{
JButton btn = new JButton(member[i]);
btn.setFont(new java.awt.Font("宋体",Font.PLAIN,15)); //设置字体 使用方法 .setFont(new java.awt.Font("字体",Font.PLAIN,字号))
pnlCenter.add(btn);
//为每个按钮注册监听器
btn.addActionListener(this);
}
}
public static void main(String[] args) {
JFrame frame = new CalculatorUI();
frame.setVisible(true); //将窗口设置为可实现化的
}
// 监听器 所有的监听事件 汇总
public void actionPerformed(ActionEvent event) {
//按钮C的功能 (清空)
if(event.getActionCommand().equals("C"))
t.setText("");
//按钮 + 的功能
else if (event.getActionCommand().equals("+")) {
s = t.getText();
num1 = Double.parseDouble(s);//Double.parseDouble(String s),注意参数是String类型的,不然它是不能转换为Double的
t.setText(""); //补充:如果要变成int,则用Integer.parseInt() 参数同上。
x=0;
}
//按钮 - 的功能
else if (event.getActionCommand().equals("-")) {
s = t.getText();
num1 = Double.parseDouble(s);//Double.parseDouble(String s),注意参数是String类型的,不然它是不能转换为Double的
t.setText("");
x=1;
}
//按钮 * 的功能
else if (event.getActionCommand().equals("*")) {
s = t.getText();
num1 = Double.parseDouble(s);//
t.setText("");
x=2;
}
//按钮 / 的功能
else if (event.getActionCommand().equals("/")) {
s = t.getText();
num1 = Double.parseDouble(s);//
t.setText("");
x=3;
}
//按钮 = 的功能
else if (event.getActionCommand().equals("=")) {
s = t.getText();
num2 = Double.parseDouble(s);//
//x时用来辨别 = 是用来实现 哪个按钮的运算
switch (x) {
case 0: t.setText("" + (num1 + num2));break; //实现按钮+的加法运算
case 1: t.setText("" + (num1 - num2));break; //实现按钮-的减法运算
case 2: t.setText("" + (num1 * num2));break; //实现按钮*的乘法运算
case 3: t.setText("" + (num1 / num2));break; //实现按钮/的除法运算
}
}
//输入小数时 小数点 . 的功能
else if (event.getActionCommand().equals(".")) {
if(t.getText().trim().indexOf('.') != -1) //getText().trim()的作用是:在获得的文本中除去空格.
{} //indexOf方法获取到指定的字符在字符串中第一次出现的位置,如果该方法不返回-1 就证明该字符串中含有'.'字符。
else
{
s = t.getText();
s = s + event.getActionCommand();
t.setText(s);
}
}
//其他数字按钮的功能 获得相应按钮的数字
else {
String s = t.getText();
s = s+event.getActionCommand();
t.setText(s);
}
}
}
补充:
1.Double.parseDouble(String s),注意参数是String类型的,不然它是不能转换为Double的,如果要变成int,则用Integer.parseInt() 参数同上。
2.getText().trim()的作用是:在获得的文本中除去空格.
3.indexOf方法获取到指定的字符在字符串中第一次出现的位置,如果该方法不返回-1 就证明该字符串中含有'.'字符。