简易计算器的设计
1.1实训内容
模仿Windows自带的标准版计算器,设计并用Java语言实现简易的计算器(根据自己的能力,可以适当地增加或删除部分功能)。
最低要求:
计算器运行界面如下图所示,包含二个文本框(分别显示算式和运算结果)、10个数字按钮(0~9)、4个运算按钮、一个等号按钮、一个清除按钮,要求将按键和结果显示在文本框中。
1.2 源代码
package 实训;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import java.awt.Color;
public class Calculator extends JFrame implements ActionListener {
// 第一行:计算式
private JTextField expText = new JTextField();
// 第二行:计算结果,设初始值为0
private JTextField resultText = new JTextField("0");
private String num1="",num2="";//两个操作数
private String fh=""; //运算符
private double r; //计算结果
// 构造方法
public Calculator() {
// 调用父类的构造函数
super("计算器");
//各个按钮上的文字
String[] keysValue= { "7", "8", "9", "÷", "4", "5", "6",
"×", "1", "2", "3", "-", "0","CE", "+","=" };
//各个按钮上的动作命令标识
String[] actionCmd= { "7", "8", "9", "/", "4", "5", "6",
"*", "1", "2", "3", "-", "0","CE", "+","=" };
JButton keys[]=new JButton[keysValue.length];
Font font=new Font("宋体",Font.PLAIN,18);
//设置计算式文本框的位置为(10,10),宽为:240,高为:40
expText.setBounds(10, 10, 240, 40);
expText.setFont(font);
expText.setBackground(Color.white);
expText.setEditable(false);// 计算式不能修改
//设置计算结果文本框的大小
resultText.setBounds(10, 50, 240, 40);
resultText.setFont(font);
resultText.setBackground(Color.white);
//设置文本框的对齐方式:右对齐
resultText.setHorizontalAlignment(SwingConstants.RIGHT);
resultText.setEditable(false);// 计算结果不能修改
// 设置窗口布局
this.setLayout(null);
this.add(expText); // 将计算式文本框添加到窗口中
this.add(resultText);// 将计算结果文本框添加到窗口中
// 放置按钮
int x=10,y=100;
for (int i=0;i<keysValue.length;i++) {
keys[i]=new JButton();
keys[i].setText(keysValue[i]);
keys[i].setActionCommand(actionCmd[i]);
keys[i].setBounds(x,y,60,45);
keys[i].setFont(font);
if(x<=130) {
x+=60;
} else {
x=10;
y+=50;
}
this.add(keys[i]);
}
// 给每个按钮添加监听
for (int i=0;i<keysValue.length;i++) {
keys[i].addActionListener(this);
}
// 窗口大小不能修改
this.setResizable(false);
// 设置窗口大小
this.setSize(270, 350);
//设置窗口的相对位置,位于屏幕中央
this.setLocationRelativeTo(null);
//设置窗口的关闭操作:直接关闭
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true); // 设置窗口可见
}
//计算
public void result(String z) {
if(z.equals("+"))
r=Double.parseDouble(num1)+Double.parseDouble(num2);
if(z.equals("-"))
r=Double.parseDouble(num1)-Double.parseDouble(num2);
if(z.equals("*"))
r=Double.parseDouble(num1)*Double.parseDouble(num2);
if(z.equals("/"))
r=Double.parseDouble(num1)/Double.parseDouble(num2);
num1=Double.toString(r);
//将结果显示在文本框resultText中
resultText.setText(num1);
//算完后将 数2 和 运算符 清空
num2="";
fh="";
}
public void actionPerformed(ActionEvent e)throws IndexOutOfBoundsException{
//e.getActionCommand()得到的是组件对象上的字符串
String cmd=e.getActionCommand();
if(cmd.equals("0")||cmd.equals("1")||cmd.equals("2")||cmd.equals("3")
||cmd.equals("4")||cmd.equals("5")||cmd.equals("6")
||cmd.equals("7")||cmd.equals("8")||cmd.equals("9")) {
if(fh.equals("")) {
num1+=cmd;
expText.setText(num1);
}
else {
num2+=cmd;
expText.setText(num1+fh+num2);
}
}
//运算
if(cmd.equals("+")) {
if(fh!="")
result(fh);//调用result函数计算结果,并将结果显示在文本框resultText中
fh="+";
//在计算式文本框中显示第一个数和符号
expText.setText(num1+fh);
}
if(cmd.equals("-")) {
if(fh!="")
result(fh);
fh="-";
expText.setText(num1+fh);
}
if(cmd.equals("*")) {
if(fh!="")
result(fh);
fh="*";
expText.setText(num1+fh);
}
if(cmd.equals("/")) {
if(fh!="")
result(fh);
fh="/";
expText.setText(num1+fh);
}
if(cmd.equals("=")) {
result(fh);
}
// "CE"键清空数据
if(cmd.equals("CE")) {
num1="";
num2="";
fh="";
expText.setText("");
resultText.setText("0");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Calculator();
}
}
1.3 测试结果
版权声明:本文为博主作者:Reed0007原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/m0_74891783/article/details/131444211