用Swing 做一个简易的计算器

package com.java1234.chap09.sect09;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* 做一个简易的计算器
* @author Administrator
* @see JFrame
* @see ActionListener
*/
//创建计算器SwingTest3类,实现ActionListener接口
public class SwingTest3 extends JFrame implements ActionListener {
/**
    * Serial Version UID
    */
private static final long serialVersionUID = -169068472193786457L;
   /**
    * 建一个类来 关闭窗口
    * @author Administrator
    *
    */
private class WindowCloser extends WindowAdapter {
 //重写父类的关闭窗体的方法
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
 }
int i;
//这里定义要操作的对应的数字或符号的按钮
private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1",
          "2", "3", "-", ".", "0", "=", "+" };
//创建按钮  这边定义一个 JButton按钮数组
JButton[] jbuttons=new JButton[str.length]; //传入str的长度,就说明要建几个按钮了
//创建一个结果按钮 或者取消按钮,用于输出结果 ,或者取消结果
JButton reset = new JButton("CE");
//创建一个结果文本框
JTextField display = new JTextField("0");
/**
* 创建一个无参数构造方法,它的作用是可以用来初始化,
* 也就是和类名相同的方法,即构造方法
* 在new 一个类对象的时候 会调用该构造方法
*/
public SwingTest3(){
super("这是一个简易计算器");   //建窗体的标题
//添加一个容器 按 4*4网格布局
JPanel panel1 = new JPanel(new GridLayout(4, 4)); //这个组件用于添加按钮的
// panel1.setLayout(new GridLayout(4,4));
//依次添加按钮到面板中
for (i = 0; i < str.length; i++) {
jbuttons[i] = new JButton(str[i]);
          panel1.add(jbuttons[i]);
      }
//再创建面板的时候直接设置边缘布局,这个组件用于添加文本框结果集的
JPanel panel2 = new JPanel(new BorderLayout());
// panel2.setLayout(new BorderLayout());这边是创建后再设置边缘布局,效果一样  
panel2.add("Center",display); //往面板里添加文本框组件
panel2.add("East", reset);   //添加结果集
// JPanel panel3 = new Panel();
getContentPane().setLayout(new BorderLayout()); //获取内容面板 设置边缘布局
getContentPane().add("North",panel2);   //把文本框结果集面板放在上面
getContentPane().add("Center",panel1); //把按钮组件部分 放在中间
// 添加每个数字 或者按钮
for(int i=0;i0){
handleNumber(label);  
}else
handleOperator(label);
}
//判断第一个输入的数据?
boolean isFirstDigit = true;
/**
    * Number handling. 在文本框里面显示我们要点击的数据
    * @param key the key of the button.
    */
private void handleNumber(String key) {
if (isFirstDigit){ //一开始肯定是 true
          display.setText(key);
     } //则文本框显示 这个数据
      else if ((key.equals(".")) && (display.getText().indexOf(".") < 0)){
      display.setText(display.getText() + ".");
     }
      else if (!key.equals(".")){
          display.setText(display.getText() + key);  //输入第二个数字或以后的数字
     }
      isFirstDigit = false; //输完第一个值后,置为false
}
/**
* 重置计算器 ce按钮
* 点击这个ce  按钮的时候 ,
* 我们把 isFirstDigit operator display 这三个地方重置为初始值
*/
private void handleReset() {
display.setText("0");
isFirstDigit = true;  //数据输完我们重置为true
operator = "=";
}
double number = 0.0; //设置计算的初始值为0.0
String operator = "=";   //计算加"+ - * / = ."  
/**
*  
    * Handling the operation.
    * @param key pressed operator's key.
    * 设计+ - * / = .的监听事件
* @param key
*/
private void handleOperator(String key) {
if (operator.equals("+"))
          number += Double.valueOf(display.getText());
      else if (operator.equals("-"))
          number -= Double.valueOf(display.getText());
      else if (operator.equals("*"))
          number *= Double.valueOf(display.getText());
      else if (operator.equals("/"))
          number /= Double.valueOf(display.getText());
      else if (operator.equals("="))
          number = Double.valueOf(display.getText());
 display.setText(String.valueOf(number));
     operator = key;
     isFirstDigit = true;
}
public static void main(String[] args) {
   //定义一个匿名对象 会默认调用里面的构造方法,SwingTest3()
new SwingTest3();  
}
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31369373/viewspace-2125029/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31369373/viewspace-2125029/

你可能感兴趣的:(用Swing 做一个简易的计算器)