/*
* ComputerPad.java
*
* Created on 2008年10月30日, 上午8:24
*/
package Computer;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
/**
*
* @author Administrator
*/
public class ComputerPad extends javax.swing.JFrame implements ActionListener {
/** Creates new form ComputerPad */
JFrame frame;
String copycontent = "";
private boolean dotExist, operated, equaled; // 帮助运算的布尔变量
private double storedNumber; // 目前的结果
private char lastOperator; // 表示上一运算符
public ComputerPad() {
initComponents();
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
btn4.addActionListener(this);
btn5.addActionListener(this);
btn6.addActionListener(this);
btn7.addActionListener(this);
btn8.addActionListener(this);
btn9.addActionListener(this);
btn0.addActionListener(this);
btnAdd.addActionListener(this);
btnDivide.addActionListener(this);
btnEquals.addActionListener(this);
btnMinus.addActionListener(this);
btnMultiply.addActionListener(this);
btnSquart.addActionListener(this);
btnDot.addActionListener(this);
btnPercent.addActionListener(this);
btnPart.addActionListener(this);
btnNegative.addActionListener(this);
btnBackSpace.addActionListener(this);
// 初始化变量
dotExist = false; // 表示当前的数是否有小数点
operated = false; // 表示任意运算符是否被按下
equaled = false; // 表示等号是否被按下
storedNumber = 0;
lastOperator = '?';
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
btn1 = new NumberButton(1);
btnSquart = new OperationButton("sqrt");
btn2 = new NumberButton(2);
btn3 = new NumberButton(3);
btn4 = new NumberButton(4);
btn5 = new NumberButton(5);
btn6 = new NumberButton(6);
btn7 = new NumberButton(7);
btn9 = new NumberButton(9);
btn8 = new NumberButton(8);
btnDivide = new OperationButton("/");
btnMinus = new OperationButton("-");
btnMultiply = new OperationButton("*");
btnPart = new OperationButton("1/x");
btnPercent = new OperationButton("%");
btn0 = new NumberButton(0);
btnNegative = new OperationButton("+/-");
txtField = new javax.swing.JTextField();
btnEquals = new OperationButton("=");
btnAdd = new OperationButton("+");
btnDot = new javax.swing.JButton();
btnBackSpace = new javax.swing.JButton();
btnClear = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
JMuleEditor = new javax.swing.JMenu();
jMenuItemCopy = new javax.swing.JMenuItem();
jMenuItemPaste = new javax.swing.JMenuItem();
jMenu3 = new javax.swing.JMenu();
jMenuItemHelp = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JSeparator();
jMenuItemAbout = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Calculator");
btn1.setForeground(new java.awt.Color(0, 0, 255));
btn1.setText("1");
btn1.setAutoscrolls(true);
btn1.setLabel("1");
btnSquart.setText("sqrt");
btn2.setText("2");
btn3.setText("3");
btn4.setLabel("4");
btn5.setText("5");
btn6.setText("6");
btn7.setText("7");
btn9.setText("9");
btn8.setText("8");
btnDivide.setText("/");
btnMinus.setText("-");
btnMultiply.setText("*");
btnPart.setText("1/x");
btnPercent.setText("%");
btn0.setText("0");
btnNegative.setText("+/-");
txtField.setText("0");
txtField.setEnabled(false);
btnEquals.setText("=");
btnAdd.setText("+");
btnDot.setText(".");
btnBackSpace.setText("BackSpace");
btnClear.setText("c");
btnClear.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnClearActionPerformed(evt);
}
});
org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel1Layout.createSequentialGroup()
.add(19, 19, 19)
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(jPanel1Layout.createSequentialGroup()
.add(btn1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btn2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btn3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnDivide, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnSquart, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(jPanel1Layout.createSequentialGroup()
.add(btn4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btn5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btn6, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnMultiply, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnPercent, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(jPanel1Layout.createSequentialGroup()
.add(btn7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btn8, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btn9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnMinus, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnPart, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(jPanel1Layout.createSequentialGroup()
.add(btn0, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnNegative, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnDot, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnAdd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(btnClear, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(txtField)
.add(jPanel1Layout.createSequentialGroup()
.add(btnBackSpace, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 145, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(18, 18, 18)
.add(btnEquals, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 151, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
.add(48, 48, 48))
);
jPanel1Layout.linkSize(new java.awt.Component[] {btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.add(txtField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 29, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(18, 18, 18)
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(btn2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btn3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnDivide, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnSquart, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btn1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 49, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(30, 30, 30)
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(btn5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btn6, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnMultiply, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnPercent, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btn4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(24, 24, 24)
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(btn8, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btn9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnMinus, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnPart, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btn7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(20, 20, 20)
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(btn0, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnNegative, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnDot, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnAdd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnClear, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(27, 27, 27)
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(btnEquals, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(btnBackSpace, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addContainerGap(50, Short.MAX_VALUE))
);
JMuleEditor.setText("编辑");
jMenuItemCopy.setText("复制");
jMenuItemCopy.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemCopyActionPerformed(evt);
}
});
JMuleEditor.add(jMenuItemCopy);
jMenuItemPaste.setText("粘贴");
jMenuItemPaste.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemPasteActionPerformed(evt);
}
});
JMuleEditor.add(jMenuItemPaste);
jMenuBar1.add(JMuleEditor);
jMenu3.setText("帮助");
jMenuItemHelp.setText("帮助主题");
jMenuItemHelp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemHelpActionPerformed(evt);
}
});
jMenu3.add(jMenuItemHelp);
jMenu3.add(jSeparator1);
jMenuItemAbout.setText("关于计算器");
jMenuItemAbout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemAboutActionPerformed(evt);
}
});
jMenu3.add(jMenuItemAbout);
jMenuBar1.add(jMenu3);
setJMenuBar(jMenuBar1);
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 381, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {
txtField.setText("");
dotExist = false;
storedNumber = 0;
lastOperator = '?'; // TODO add your handling code here:
}
private void jMenuItemAboutActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(frame, " Java计算器\n 赵晨诚 制作\n\n http://cse.cslg.cn/", "关于计算器", JOptionPane.INFORMATION_MESSAGE);
// TODO add your handling code here:
}
private void jMenuItemHelpActionPerformed(java.awt.event.ActionEvent evt) {
try {
String filePath = "C:/WINDOWS/Help/calc.chm";
Runtime.getRuntime().exec("cmd.exe /c " + filePath);
} catch (Exception eeee) {
JOptionPane.showMessageDialog(frame, " Java计算器\n 打开系统的计算器出错", "sorry", JOptionPane.INFORMATION_MESSAGE);
}// TODO add your handling code here:
}
private void jMenuItemCopyActionPerformed(java.awt.event.ActionEvent evt) {
copycontent = txtField.getText();// TODO add your handling code here:
}
private void jMenuItemPasteActionPerformed(java.awt.event.ActionEvent evt) {
txtField.setText(txtField.getText() + copycontent);// TODO add your handling code here:
}
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
if (btn == btnAdd) {
operate('+');
equaled = false;
} else if (btn == btnDivide) {
operate('/');
equaled = false;
} else if (btn == btnEquals) {
operate('=');
equaled = true;
} else if (btn == btnMinus) {
operate('-');
equaled = false;
} else if (btn == btnMultiply) {
operate('*');
equaled = false;
} else if (btn == btnSquart) {
operate('s');
operate('=');
equaled = false;
}else if(btn==btnNegative){
operate('N');
operate('=');
equaled = true;
}else if(btn==btnPercent){
operate('%');
operate('=');
equaled=true;
}else if(btn==btnPart){
operate('P');
operate('=');
equaled = true;
}else if(btn==btnBackSpace){
if(txtField.getText().length()!=0)
txtField.setText(txtField.getText().substring(0, txtField.getText().length()-1));
}
else
{
if (e.getSource() instanceof NumberButton) {
if (equaled) {
storedNumber = 0;
}
NumberButton b = (NumberButton) e.getSource();
if (txtField.getText().equals("0")) {
txtField.setText("" + b.getNumber());
} else if (!operated) {
txtField.setText(txtField.getText() + b.getNumber());
} else {
txtField.setText("" + b.getNumber());
operated = false;
}
}
if (btn == btnDot && !dotExist) {
txtField.setText(txtField.getText() + ".");
dotExist = true;
}
}
}
private void operate(char operator) {
double currentNumber = Double.valueOf(txtField.getText()).doubleValue();
switch (lastOperator) {
case '?': {
storedNumber = currentNumber;
break;
}
case '+': {
storedNumber += currentNumber;
break;
}
case '-': {
storedNumber -= currentNumber;
break;
}
case '*': {
storedNumber *= currentNumber;
break;
}
case '/': {
storedNumber /= currentNumber;
break;
}
case 'N': {
storedNumber *= -1;
break;
}
case 's': {
storedNumber = Math.sqrt(currentNumber);
break;
}
case '%':{
storedNumber *=0.01;
break;
}
case 'P':{
storedNumber = 1/storedNumber;
break;
}
}
if (lastOperator == '=' && equaled) {
storedNumber = currentNumber;
}
txtField.setText("" + storedNumber);
operated = true;
lastOperator = operator;
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ComputerPad().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JMenu JMuleEditor;
private javax.swing.JButton btn0;
private javax.swing.JButton btn1;
private javax.swing.JButton btn2;
private javax.swing.JButton btn3;
private javax.swing.JButton btn4;
private javax.swing.JButton btn5;
private javax.swing.JButton btn6;
private javax.swing.JButton btn7;
private javax.swing.JButton btn8;
private javax.swing.JButton btn9;
private javax.swing.JButton btnAdd;
private javax.swing.JButton btnBackSpace;
private javax.swing.JButton btnClear;
private javax.swing.JButton btnDivide;
private javax.swing.JButton btnDot;
private javax.swing.JButton btnEquals;
private javax.swing.JButton btnMinus;
private javax.swing.JButton btnMultiply;
private javax.swing.JButton btnNegative;
private javax.swing.JButton btnPart;
private javax.swing.JButton btnPercent;
private javax.swing.JButton btnSquart;
private javax.swing.JMenu jMenu3;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItemAbout;
private javax.swing.JMenuItem jMenuItemCopy;
private javax.swing.JMenuItem jMenuItemHelp;
private javax.swing.JMenuItem jMenuItemPaste;
private javax.swing.JPanel jPanel1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTextField txtField;
// End of variables declaration
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Computer;
/**
*
* @author Administrator
*/
import java.awt.*;
import javax.swing.*;
public class NumberButton extends JButton
{
int number;
public NumberButton(int number)
{
super(""+number);
this.number=number;
setForeground(Color.blue);
}
public int getNumber()
{
return number;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Computer;
/**
*
* @author Administrator
*/
import java.awt.*;
import javax.swing.*;
public class OperationButton extends JButton
{
String 运算符号;
public OperationButton(String s)
{
super(s);
运算符号=s;
setForeground(Color.red);
}
public String getOperationSymbol()
{
return 运算符号;
}
}