实现简单的加减乘除运算
package chapter07.project_4;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class window extends JFrame implements ActionListener{
private String operator = "="; //当前运算的运算符
private boolean firstDigit = true; //判断是否是第一个数字
private double resultNum = 0.0; // 计算的中间结果
private boolean operateValidFlag = true; //判断操作是否合法
private JPanel jp = new JPanel(); //创建面板
private JTextField jtxtName = new JTextField("0"); //创建文本框
private JButton Del = new JButton("C"); //创建按钮
private JButton[] jbArray = {new JButton("7"),new JButton("4"),new JButton("1"),new JButton("0"),
new JButton("8"),new JButton("5"),new JButton("2"),new JButton("."),
new JButton("9"),new JButton("6"),new JButton("3"),new JButton("="),
new JButton("+"),new JButton("-"),new JButton("*"),new JButton("/")};
//定义构造函数
public window(){
jp.setLayout(null); //设置JPanel的布局管理器
for(int i = 0, j = 0; i < 16; i++){
jbArray[i].setBounds(j * 60, 50 + (i%4) * 30, 60, 30); //设置按钮大小
jp.add(jbArray[i]); //将按钮添加进JPanel
jbArray[i].addActionListener(this); //为按钮注册监听器
if(i%4 == 3) j++;
}
Del.setBounds(180,10,60,30);
jp.add(Del);
Del.addActionListener(this);
jtxtName.setBounds(10,10,160,30);
jp.add(jtxtName);
jtxtName.addActionListener(this);
this.add(jp); //将JPanel容器添加进窗体
this.setTitle("计算器");
this.setResizable(false); //窗体不可自由改变大小
this.setBounds(100,100,246,197);
this.setVisible(true); //窗体可见
}
//实现ActionListener中的方法
public void actionPerformed(ActionEvent e){
String c = e.getActionCommand(); //返回与此动作相关的命令字符串
if(c.equals("C")){
handleC(); //用户按了"C"键,清除全部!!
}else if("0123456789.".indexOf(c) >= 0){ //indexOf 在字符串中查找子字符,返回第一个找到的索引位置,未找到返回-1
handleNumber(c); //用户按了数字或小数点键
}else{
handleOperator(c); //用户按了运算符键
}
}
// 初始化计算器的各种值
private void handleC()
{
jtxtName.setText("0");
firstDigit = true;
operator = "=";
}
private void handleNumber(String button){
if (firstDigit){
jtxtName.setText(button); //输入的是第一个数字,无需判断小数点
}else if((button.equals(".")) && (jtxtName.getText().indexOf(".") < 0)){
jtxtName.setText(jtxtName.getText() + "."); //输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
}else if(!button.equals("."))// 如果输入的不是小数点,则将数字附在结果文本框的后面
{
jtxtName.setText(jtxtName.getText() + button);
}
firstDigit = false; //以后输入的肯定不是第一个数字了
}
private void handleOperator(String button){
if(operator.equals("/")){ //除法运算
//如果当前结果文本框中的值等于0
if(getNumberFromText() == 0.0){
operateValidFlag = false; //操作不合法
jtxtName.setText("除数不能为零");
}else{
resultNum /= getNumberFromText();
}
}else if(operator.equals("+")){ //加法运算
resultNum += getNumberFromText();
}else if(operator.equals("-")){ //减法运算
resultNum -= getNumberFromText();
}else if(operator.equals("*")){ //乘法运算
resultNum *= getNumberFromText();
}else if(operator.equals("=")){ //赋值运算
resultNum = getNumberFromText();
}
jtxtName.setText(String.valueOf(resultNum)); //将运算后结果重新赋给文本框
operator = button; //运算符等于用户按的按钮
firstDigit = true;
operateValidFlag = true;
}
//从结果的文本框获取数字
private double getNumberFromText()
{
double result = 0;
try{
result = Double.valueOf(jtxtName.getText()).doubleValue();
//将jtxtName.getText()字符串转化为一个Double对象,然后调用这个对象的doubleValue方法返回对应double数值赋给result
}catch(NumberFormatException e){
}
return result;
}
public static void main(String[] args){
new window();
}
}