
package com.jluzh.javabasic.ex8;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
public class CalculatorPro extends JApplet
{
//定义计算器显示框;
private JTextField jTextField1;
//定义0-9按键;
private JButton button0,button1,button2,button3,button4,button5,
button6,button7,button8,button9;
//定义操作符和功能键;
private JButton buttonPlus,buttonMinus,buttonMulti,buttonDivide;
private JButton buttonEqual,buttonDot,buttonClear;
private JPanel numbers; //定义数字面板
double num1,num2,result;
char operator;
boolean next=false;
boolean num1Exist=false;
public void init()
{ //布局
Container c=this.getContentPane();
BorderLayout bL=new BorderLayout();
c.setLayout (bL);
//添加结果框
jTextField1=new JTextField("0");
c.add(jTextField1,BorderLayout.NORTH);
jTextField1.setHorizontalAlignment(jTextField1.RIGHT);
jTextField1.setBackground(Color.green);
numbers=new JPanel();
GridLayout grid=new GridLayout(4,4,5,5);
numbers.setLayout (grid);
//生成数字键
button0=new JButton("0");
button1=new JButton("1");
button2=new JButton("2");
button3=new JButton("3");
button4=new JButton("4");
button5=new JButton("5");
button6=new JButton("6");
button7=new JButton("7");
button8=new JButton("8");
button9=new JButton("9");
//生成功能键
buttonPlus=new JButton("+");
buttonPlus.setForeground(Color.blue);
buttonMinus=new JButton("-");
buttonMinus.setForeground(Color.blue);
buttonMulti=new JButton("*");
buttonMulti.setForeground(Color.blue);
buttonDivide=new JButton("/");
buttonDivide.setForeground(Color.blue);
buttonEqual=new JButton("=");
buttonEqual.setForeground(Color.red);
buttonDot=new JButton(".");
buttonClear=new JButton("Clear");
buttonClear.setForeground(Color.red);
buttonClear.setToolTipText("清除结果");
//添加数字键和功能键
numbers.add(button7);
numbers.add(button8);
numbers.add(button9);
numbers.add(buttonDivide);
numbers.add(button4);
numbers.add(button5);
numbers.add(button6);
numbers.add(buttonMulti);
numbers.add(button1);
numbers.add(button2);
numbers.add(button3);
numbers.add(buttonMinus);
numbers.add(button0);
numbers.add(buttonDot);
numbers.add(buttonEqual);
numbers.add(buttonPlus);
c.add (numbers,BorderLayout.CENTER);
c.add(buttonClear,BorderLayout.SOUTH);
c.setVisible (true);
//事件监听器
ButtonHandler handler=new ButtonHandler();
button0.addActionListener(handler);
button1.addActionListener(handler);
button2.addActionListener(handler);
button3.addActionListener(handler);
button4.addActionListener(handler);
button5.addActionListener(handler);
button6.addActionListener(handler);
button7.addActionListener(handler);
button8.addActionListener(handler);
button9.addActionListener(handler);
buttonPlus.addActionListener(handler);
buttonMinus.addActionListener(handler);
buttonMulti.addActionListener(handler);
buttonDivide.addActionListener(handler);
buttonEqual.addActionListener(handler);
buttonDot.addActionListener(handler);
buttonClear.addActionListener(handler);
}
private class ButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String str=e.getActionCommand();
char one=str.charAt(0);
String original=jTextField1.getText ();
int originalLen=original.length();
double originalValue=Double.valueOf(original).doubleValue();
switch(one)
{
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
if(next==true)
{
jTextField1.setText(str);
next=false;
}
else
{
if(originalLen<20)
{
if(original.equals("0") )
jTextField1.setText (str);
else
jTextField1.setText (jTextField1.getText ()+str);
}
}
break;
case '.': if(next==true)
{
jTextField1.setText ("0.");
next=false;
}
else
{
if(originalLen<20)
{
if(original.indexOf(".")<0)
jTextField1.setText (jTextField1.getText ()+str); }
}
break;
case '+': num1=Double.valueOf(original).doubleValue();
operator='+';
next=true;
//num1Exist=true;
break;
case '-': num1=Double.valueOf(original).doubleValue();
operator='-';
next=true;
//num1Exist=true;
break;
case '*': num1=Double.valueOf(original).doubleValue();
operator='*';
next=true;
//num1Exist=true;
break;
case '/': num1=Double.valueOf(original).doubleValue();
operator='/';
next=true;
// num1Exist=true;
break;
//计算并显示结果
case '=': //if(num1Exist==true)
//{
num2=Double.valueOf(original).doubleValue();
switch(operator)
{
case'+':result=num1+num2;
break;
case'-':result=num1-num2;
break;
case'*':result=num1*num2;
break;
case'/':result=num1/num2;
break;
}
jTextField1.setText (String.valueOf(result));
next=true;
break;
//清除结果
case 'C':jTextField1.setText ("0");
next=false;
//num1Exist=false;
break;
}
}
}
}
import java.awt.event.*;
import javax.swing.*;
public class JCalculator extends JFrame implements ActionListener {
private static final long serialVersionUID = -169068472193786457L;
private class WindowCloser extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
int i;
private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1",
"2", "3", "-", ".", "0", "=", "+" };
JButton[] buttons = new JButton[str.length];
JButton reset = new JButton("CE");
JTextField display = new JTextField("0");
public JCalculator() {
super("Calculator");
JPanel panel1 = new JPanel(new GridLayout(4, 4));
for (i = 0; i < str.length; i++) {
buttons[i] = new JButton(str[i]);
panel1.add(buttons[i]);
}
JPanel panel2 = new JPanel(new BorderLayout());
panel2.add("Center", display);
panel2.add("East", reset);
getContentPane().setLayout(new BorderLayout());
getContentPane().add("North", panel2);
getContentPane().add("Center", panel1);
for (i = 0; i < str.length; i++)
buttons[i].addActionListener(this);
reset.addActionListener(this);
display.addActionListener(this);
addWindowListener(new WindowCloser());
setSize(800, 800);
setVisible(true);
pack();
}
public void actionPerformed(ActionEvent e) {
Object target = e.getSource();
String label = e.getActionCommand();
if (target == reset)
handleReset();
else if ("0123456789.".indexOf(label) > 0)
handleNumber(label);
else
handleOperator(label);
}
boolean isFirstDigit = true;
public void handleNumber(String key) {
if (isFirstDigit)
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;
}
public void handleReset() {
display.setText("0");
isFirstDigit = true;
operator = "=";
}
double number = 0.0;
String operator = "=";
public 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) {
new JCalculator();
}
}