import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class CalculatorDemo extends JPanel implements ActionListener {
JButton ButtonNumber[] = new JButton[10];
JButton ButtonAdd, ButtonSubtract, ButtonMul, ButtonDivind;
JButton ButtonPoint, ButtonEqual;
JButton ButtonMC, ButtonMR, ButtonMSub, ButtonMplus;
JButton ButtonSqrt, ButtonPercent, ButtonInvert, ButtonNega;
JButton ButtonCE, ButtonBackspace, ButtonClear;
JButton ButtonOFF;
JTextField TextFieldTitle;
JLabel LabelNull;
String Operator = null;
int stateTextField = 1;
double Operand1 = 0.0;
double ans = 0.0;
double M = 0.0;
CalculatorDemo() {
setLayout(new BorderLayout());
ButtonAdd = new JButton("+");
ButtonSubtract = new JButton("-");
ButtonMul = new JButton("*");
ButtonDivind = new JButton("/");
ButtonPoint = new JButton(".");
ButtonEqual = new JButton("=");
ButtonClear = new JButton("Clear");
ButtonCE = new JButton("CE");
ButtonBackspace = new JButton("Backspace");
ButtonMC = new JButton("MC");
ButtonMR = new JButton("MR");
ButtonMSub = new JButton("M-");
ButtonMplus = new JButton("M+");
ButtonSqrt = new JButton("sqrt");
ButtonPercent = new JButton("%");
ButtonInvert = new JButton("1/x");
ButtonNega = new JButton("+/-");
ButtonOFF = new JButton("OFF");
for (int i = 0; i < 10; i++) {
ButtonNumber[i] = new JButton("" + i);
}
LabelNull = new JLabel("");
TextFieldTitle = new JTextField("0");
TextFieldTitle.setHorizontalAlignment(JTextField.RIGHT);
TextFieldTitle.setEditable(false);
TextFieldTitle.setBackground(Color.white);
TextFieldTitle.setForeground(Color.red);
add(TextFieldTitle, BorderLayout.NORTH);
add(getCompenent1(), BorderLayout.CENTER);
add(getComponent2(), BorderLayout.SOUTH);
for (int i = 0; i < ButtonNumber.length; i++) {
ButtonNumber[i].addActionListener(this);
}
ButtonAdd.addActionListener(this);
ButtonSubtract.addActionListener(this);
ButtonMul.addActionListener(this);
ButtonDivind.addActionListener(this);
ButtonPoint.addActionListener(this);
ButtonEqual.addActionListener(this);
ButtonClear.addActionListener(this);
ButtonCE.addActionListener(this);
ButtonBackspace.addActionListener(this);
ButtonMC.addActionListener(this);
ButtonMR.addActionListener(this);
ButtonMSub.addActionListener(this);
ButtonMplus.addActionListener(this);
ButtonSqrt.addActionListener(this);
ButtonPercent.addActionListener(this);
ButtonInvert.addActionListener(this);
ButtonNega.addActionListener(this);
ButtonOFF.addActionListener(this);
} //End Constructor
JPanel getCompenent1() {
JPanel p = new JPanel(new GridLayout(1, 5, 3, 3));
p.add(ButtonOFF);
p.add(LabelNull);
p.add(ButtonBackspace);
p.add(ButtonCE);
p.add(ButtonClear);
return p;
} // End Method getComponent
JPanel getComponent2() {
JPanel p = new JPanel(new GridLayout(4, 6, 3, 3));
p.add(ButtonMC);
p.add(ButtonNumber[7]);
p.add(ButtonNumber[8]);
p.add(ButtonNumber[9]);
p.add(ButtonDivind);
p.add(ButtonSqrt);
p.add(ButtonMR);
p.add(ButtonNumber[4]);
p.add(ButtonNumber[5]);
p.add(ButtonNumber[6]);
p.add(ButtonMul);
p.add(ButtonPercent);
p.add(ButtonMSub);
p.add(ButtonNumber[1]);
p.add(ButtonNumber[2]);
p.add(ButtonNumber[3]);
p.add(ButtonSubtract);
p.add(ButtonInvert);
p.add(ButtonMplus);
p.add(ButtonNumber[0]);
p.add(ButtonPoint);
p.add(ButtonEqual);
p.add(ButtonAdd);
p.add(ButtonNega);
return p;
} // End Method getComponent
public void actionPerformed(ActionEvent e) {
if (e.getSource() == ButtonNumber[0]) {
if (TextFieldTitle.getText().length() == 1 && TextFieldTitle.getText().equals("0")) {
TextFieldTitle.setText("0");
}
else if (stateTextField == 1) {
TextFieldTitle.setText(TextFieldTitle.getText() + "0");
} else {
TextFieldTitle.setText("0");
stateTextField = 1;
}
} else {
for (int i = 1; i < 10; i++) {
if (e.getSource() == ButtonNumber[i]) {
if (TextFieldTitle.getText().equals("0")) {
TextFieldTitle.setText("" + i);
}
else if (stateTextField == 1) {
TextFieldTitle.setText(TextFieldTitle.getText() + i);
} else {
TextFieldTitle.setText("" + i);
stateTextField = 1;
}
}
}
}
if (e.getSource() == ButtonPoint) {
if (TextFieldTitle.getText().length() == 1) {
TextFieldTitle.setText(TextFieldTitle.getText() + ".");
} else {
TextFieldTitle.setText(TextFieldTitle.getText() + "0");
}
}
else if (e.getSource() == ButtonAdd) {
Operand1 = Double.parseDouble(TextFieldTitle.getText());
Operator = "+";
stateTextField = 2;
}
else if (e.getSource() == ButtonSubtract) {
Operand1 = Double.parseDouble(TextFieldTitle.getText());
Operator = "-";
stateTextField = 2;
}
else if (e.getSource() == ButtonMul) {
Operand1 = Double.parseDouble(TextFieldTitle.getText());
Operator = "*";
stateTextField = 2;
}
else if (e.getSource() == ButtonDivind) {
Operand1 = Double.parseDouble(TextFieldTitle.getText());
Operator = "/";
stateTextField = 2;
}
else if (e.getSource() == ButtonPercent) {
Operand1 = Double.parseDouble(TextFieldTitle.getText());
Operator = "%";
stateTextField = 2;
}
else if (e.getSource() == ButtonSqrt) {
Operand1 = Double.parseDouble(TextFieldTitle.getText());
TextFieldTitle.setText(Double.toString(Math.sqrt(Operand1)));
stateTextField = 2;
}
else if (e.getSource() == ButtonInvert) {
Operand1 = Double.parseDouble(TextFieldTitle.getText());
TextFieldTitle.setText(Double.toString(1 / Operand1));
stateTextField = 2;
}
else if (e.getSource() == ButtonNega) {
Operand1 = Double.parseDouble(TextFieldTitle.getText());
TextFieldTitle.setText(Double.toString(-1 * Operand1));
stateTextField = 2;
}
else if (e.getSource() == ButtonEqual) {
if (Operator != null) {
ans = answer(Operand1, Operator, Double.parseDouble(TextFieldTitle.getText()));
TextFieldTitle.setText(Double.toString(ans));
Operator = null;
}
}
else if (e.getSource() == ButtonClear) {
Operator = null;
TextFieldTitle.setText("0");
stateTextField = 1;
}
else if (e.getSource() == ButtonCE) {
TextFieldTitle.setText("0");
stateTextField = 1;
}
else if (e.getSource() == ButtonMplus) {
double z = Double.parseDouble(TextFieldTitle.getText());
M = M + z;
Operator = null;
stateTextField = 2;
}
else if (e.getSource() == ButtonMSub) {
double z = Double.parseDouble(TextFieldTitle.getText());
M = M - z;
Operator = null;
stateTextField = 2;
}
else if (e.getSource() == ButtonMR) {
TextFieldTitle.setText(Double.toString(M));
}
else if (e.getSource() == ButtonMC) {
M = 0;
stateTextField = 1;
}
else if (e.getSource() == ButtonOFF) {
System.exit(3);
}
if (e.getSource() == ButtonBackspace) {
if (!TextFieldTitle.getText().equals("0") && !TextFieldTitle.getText().equals(null)) {
String S = TextFieldTitle.getText();
int num = S.length();
if (num != 1) {
String S2 = S.substring(0, num - 1);
TextFieldTitle.setText(S2);
} else {
TextFieldTitle.setText("0");
}
}
}
}
double answer(double O1, String Operator, double O2) {
if (Operator.equals("+")) {
return O1 + O2;
}
else if (Operator.equals("-")) {
return O1 - O2;
}
else if (Operator.equals("*")) {
return O1 * O2;
}
else if (Operator.equals("/")) {
return O1 / O2;
}
else if (Operator.equals("%")) {
return O1 * (O2 / 100);
} else {
System.out.println("Operator Error");
}
return 0.0;
} //End Method answer()
public static void main(String args[]) {
JFrame f = new JFrame("Calculator Demo");
f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
f.setContentPane(new CalculatorDemo());
f.setResizable(false);
f.pack();
f.setVisible(true);
} //End Method Main
} //End Class "CalculatorDemo"
เขียนเมื่อ: 2010-01-15 17:23:22
โดย: it_buu