
/* |
* @(#)JCalculator.java 1.00 12/29/2009 |
* |
* Email: light_warm@163.com |
*/ |
|
import java.awt.*; |
import java.awt.event.*; |
import javax.swing.*; |
|
/** |
* A simple calculator program. |
* <p>I saw this program in a QQ group, and help a friend correct it.</p> |
* |
* @author Singyuen Yip |
* @version 1.00 12/29/2009 |
* @see JFrame |
* @see ActionListener |
*/ |
public class JCalculator extends JFrame implements ActionListener { |
/** |
* Serial Version UID |
*/ |
private static final long serialVersionUID = -169068472193786457L; |
/** |
* This class help close the Window. |
* @author Singyuen Yip |
* |
*/ |
private class WindowCloser extends WindowAdapter { |
public void windowClosing(WindowEvent we) { |
System.exit(0); |
} |
} |
|
int i; |
// Strings for Digit & Operator buttons. |
private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1", |
"2", "3", "-", ".", "0", "=", "+" }; |
// Build buttons. |
JButton[] buttons = new JButton[str.length]; |
// For cancel or reset. |
JButton reset = new JButton("CE"); |
// Build the text field to show the result. |
JTextField display = new JTextField("0"); |
|
/** |
* Constructor without parameters. |
*/ |
public JCalculator() { |
super("Calculator"); |
// Add a panel. |
JPanel panel1 = new JPanel(new GridLayout(4, 4)); |
// panel1.setLayout(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.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); |
// Add action listener for each digit & operator button. |
for (i = 0; i < str.length; i++) |
buttons[i].addActionListener(this); |
// Add listener for "reset" button. |
reset.addActionListener(this); |
// Add listener for "display" button. |
display.addActionListener(this); |
// The "close" button "X". |
addWindowListener(new WindowCloser()); |
// Initialize the window size. |
setSize(800, 800); |
// Show the window. |
// show(); Using show() while JDK version is below 1.5. |
setVisible(true); |
// Fit the certain size. |
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); |
} |
// Is the first digit pressed? |
boolean isFirstDigit = true; |
/** |
* Number handling. |
* @param key the key of the button. |
*/ |
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; |
} |
|
/** |
* Reset the calculator. |
*/ |
public void handleReset() { |
display.setText("0"); |
isFirstDigit = true; |
operator = "="; |
} |
|
double number = 0.0; |
String operator = "="; |
|
/** |
* Handling the operation. |
* @param key pressed operator's key. |
*/ |
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(); |
} |
} |




中级程序员
by: 代码代码 发表于:2017-10-16 00:25:50 顶(0) | 踩(0) 回复
学习代码中,感觉会很有用,
回复评论