本程序?qū)懹趧倓倢W(xué)習(xí)j2se的swing時,記得課堂上老師說起,他們那會兒畢業(yè)找工作,能夠?qū)懗鰝€計(jì)算器就算是會寫程序的人,就不愁找不到工作了,于是我就寫了這個程序,安慰一下失業(yè)不久的自己。回想起來,這個東西還是挺能夠鍛煉邏輯思維的,當(dāng)初確實(shí)是費(fèi)了不少心思,界面就可以看到,懶這個鍵是調(diào)用Windows系統(tǒng)的計(jì)算器,當(dāng)初就是一步步照它而完成的,當(dāng)然這個程序并沒有實(shí)現(xiàn)科學(xué)計(jì)算。由于程序是剛剛系統(tǒng)學(xué)習(xí)編程不久時寫的,很多地方存在不規(guī)范,而且一些地方繞了彎子,諸如界面按鈕的定義并不是采用數(shù)組而成,而是手工畫上去的,再有就是java監(jiān)聽器的使用。
以下為運(yùn)行效果圖:
以下為程序源代碼:
package calculate;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;


/** *//**
* <p>Title: 簡單計(jì)算器</p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: 無業(yè)游民</p>
*
* @author 非凡DZ
* @version 1.0
*/

public class FrameCalculate extends JFrame
{
private String front = "", behind = ""; //分別用于記錄加減乘除運(yùn)算符之前,之后輸入的內(nèi)容
private String op; //用于記錄運(yùn)算符
private String re;//用于存儲運(yùn)算結(jié)果的字符串格式
private boolean flag = false; //用于記錄是否按下了運(yùn)算符
private boolean flag1 = false;//用于判斷是否輸入了點(diǎn)運(yùn)算符
private double result;//用于存儲運(yùn)算結(jié)果
private boolean flag2 = false;//用于判斷是否輸入了數(shù)字
private boolean flag3 = false;//用于判斷是否按下了等號運(yùn)算符
JPanel contentPane;
JTextField txtResult = new JTextField();
JButton btnNull = new JButton();
JButton btnFour = new JButton();
JButton btnFive = new JButton();
JButton btnSix = new JButton();
JButton btnDecrease = new JButton();
JButton btnBegin = new JButton();
JButton btnOne = new JButton();
JButton btnTwo = new JButton();
JButton btnThree = new JButton();
JButton btnMultiply = new JButton();
JButton btnCancel = new JButton();
JButton btnZero = new JButton();
JButton btnMinus = new JButton();
JButton btnPoint = new JButton();
JButton btnDivide = new JButton();
JButton btnEqual = new JButton();
JButton btnIncrease = new JButton();
JButton btnSeven = new JButton();
JButton btnEight = new JButton();
JButton btnNine = new JButton();

public FrameCalculate()
{

try
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();

} catch (Exception exception)
{
exception.printStackTrace();
}
}


/** *//**
* Component initialization.
*
* @throws java.lang.Exception
*/

private void jbInit() throws Exception
{
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
this.setResizable(false);
setSize(new Dimension(400, 300));
setTitle("計(jì)算器");
txtResult.setEnabled(false);
txtResult.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
txtResult.setEditable(false);
txtResult.setText("0");
txtResult.setHorizontalAlignment(SwingConstants.RIGHT);
txtResult.setBounds(new Rectangle(33, 19, 310, 34));
btnNull.setBounds(new Rectangle(298, 70, 46, 37));
btnNull.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12));
btnNull.setText("懶");
btnNull.addActionListener(new FrameCalculate_btnNull_actionAdapter(this));
btnFour.setBounds(new Rectangle(33, 120, 46, 37));
btnFour.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnFour.setText("4");
btnFive.setBounds(new Rectangle(101, 120, 46, 37));
btnFive.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnFive.setText("5");
btnSix.setBounds(new Rectangle(167, 119, 46, 37));
btnSix.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnSix.setText("6");
btnDecrease.setBounds(new Rectangle(234, 120, 46, 37));
btnDecrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnDecrease.setText("-");
btnBegin.setBounds(new Rectangle(298, 121, 46, 37));
btnBegin.setFont(new java.awt.Font("Dialog", Font.PLAIN, 15));
btnBegin.setText("C");
btnBegin.addActionListener(new FrameCalculate_btnBegin_actionAdapter(this));
btnOne.setBounds(new Rectangle(33, 172, 46, 37));
btnOne.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnOne.setText("1");
btnTwo.setBounds(new Rectangle(101, 172, 46, 37));
btnTwo.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnTwo.setText("2");
btnThree.setBounds(new Rectangle(167, 172, 46, 37));
btnThree.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnThree.setText("3");
btnMultiply.setBounds(new Rectangle(234, 172, 46, 37));
btnMultiply.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnMultiply.setText("*");
btnCancel.setBounds(new Rectangle(298, 172, 46, 37));
btnCancel.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12));
btnCancel.setText("←");
btnCancel.addActionListener(new FrameCalculate_btnCancel_actionAdapter(this));
btnZero.setBounds(new Rectangle(33, 222, 46, 37));
btnZero.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnZero.setText("0");
//加載數(shù)字0-9的監(jiān)聽事件
btnZero.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnOne.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnTwo.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnThree.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnFour.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnFive.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnSix.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnSeven.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnEight.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnNine.addActionListener(new FrameCalculate_btnZero_actionAdapter(this));
btnMinus.setBounds(new Rectangle(101, 222, 46, 37));
btnMinus.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));
btnMinus.setText("+/-");
btnMinus.addActionListener(new FrameCalculate_btnMinus_actionAdapter(this));
btnPoint.setBounds(new Rectangle(167, 222, 46, 37));
btnPoint.setFont(new java.awt.Font("Dialog", Font.PLAIN, 30));
btnPoint.setHorizontalTextPosition(SwingConstants.CENTER);
btnPoint.setText(".");
btnPoint.addActionListener(new FrameCalculate_btnPoint_actionAdapter(this));
btnDivide.setBounds(new Rectangle(234, 222, 46, 37));
btnDivide.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnDivide.setText("/");
btnEqual.setBounds(new Rectangle(298, 222, 46, 37));
btnEqual.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnEqual.setText("=");
btnEqual.addActionListener(new FrameCalculate_btnEqual_actionAdapter(this));
btnIncrease.setBounds(new Rectangle(234, 70, 46, 37));
btnIncrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnIncrease.setText("+");
//加載加減乘除運(yùn)算符的監(jiān)聽事件
btnIncrease.addActionListener(new
FrameCalculate_btnIncrease_actionAdapter(this));
btnDecrease.addActionListener(new
FrameCalculate_btnIncrease_actionAdapter(this));
btnMultiply.addActionListener(new
FrameCalculate_btnIncrease_actionAdapter(this));
btnDivide.addActionListener(new
FrameCalculate_btnIncrease_actionAdapter(this));
btnSeven.setBounds(new Rectangle(33, 70, 46, 37));
btnSeven.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnSeven.setText("7");
btnEight.setBounds(new Rectangle(101, 70, 46, 37));
btnEight.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnEight.setText("8");
btnNine.setBounds(new Rectangle(167, 70, 46, 37));
btnNine.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
btnNine.setText("9");
contentPane.add(btnFive);
contentPane.add(btnSix);
contentPane.add(btnDecrease);
contentPane.add(btnBegin);
contentPane.add(btnOne);
contentPane.add(btnTwo);
contentPane.add(btnThree);
contentPane.add(btnMultiply);
contentPane.add(btnCancel);
contentPane.add(btnMinus);
contentPane.add(btnPoint);
contentPane.add(btnDivide);
contentPane.add(btnEqual);
contentPane.add(btnEight);
contentPane.add(btnNine);
contentPane.add(btnFour);
contentPane.add(btnSeven);
contentPane.add(btnIncrease);
contentPane.add(btnNull);
contentPane.add(txtResult);
contentPane.add(btnZero);
}


public void btnNull_actionPerformed(ActionEvent e)
{

try
{
Runtime.getRuntime().exec("calc.exe"); //調(diào)用系統(tǒng)的計(jì)算器

} catch (IOException ex)
{
}
}


public void btnZero_actionPerformed(ActionEvent e)
{

if (flag)
{ //如果剛剛按下了運(yùn)算符
txtResult.setText("");

if (flag1)
{//判斷之前是否輸入了點(diǎn)運(yùn)算符
txtResult.setText("0." + e.getActionCommand());
flag1 = false;

} else
{
txtResult.setText(e.getActionCommand());
}
flag2 = true;

} else
{
int num = txtResult.getText().indexOf(".");

if (num < 0 && !txtResult.getText().equals("0"))
{
txtResult.setText(txtResult.getText() + e.getActionCommand());

} else if (num < 0 && txtResult.getText().equals("0"))
{
txtResult.setText(e.getActionCommand());

} else if (num >= 0 && txtResult.getText().equals("0"))
{
txtResult.setText("0." + e.getActionCommand());

} else if (num >= 0 && !txtResult.getText().equals("0"))
{
txtResult.setText(txtResult.getText() + e.getActionCommand());
}
}
flag = false;
flag3=false;
}


public void btnIncrease_actionPerformed(ActionEvent e)
{

if(flag3)
{
txtResult.setText(txtResult.getText());
op = e.getActionCommand(); //得到剛剛按下的運(yùn)算符
front = txtResult.getText(); //記錄加減乘除運(yùn)算符之前輸入的內(nèi)容
}

else if (flag2)
{
ActionEvent ee = new ActionEvent("qq", 1, "pp");
btnEqual_actionPerformed(ee);
op = e.getActionCommand(); //得到剛剛按下的運(yùn)算符
front = re;
flag2 = false;

} else
{
front = txtResult.getText(); //記錄加減乘除運(yùn)算符之前輸入的內(nèi)容
op = e.getActionCommand(); //得到剛剛按下的運(yùn)算符
}
flag3=false;
flag = true; //記錄已經(jīng)按下了加減乘除運(yùn)算符的其中一個
}


public void btnEqual_actionPerformed(ActionEvent e)
{
if(!flag3)//未曾按下等于運(yùn)算符
behind = txtResult.getText();
else
front = re;

try
{
double a1 = Double.parseDouble(front);
double b1 = Double.parseDouble(behind);

if (op == "+")
{
result = a1 + b1;

} else if (op == "-")
{
result = a1 - b1;

} else if (op == "*")
{
result = a1 * b1;

} else
{
result = a1 / b1;
}
Double r = new Double(result);
re = r.toString(result);
txtResult.setText(re);

} catch (ArithmeticException ce)
{
txtResult.setText("除數(shù)不能為零");

} catch (Exception ee)
{
}
if (!flag3)
flag3 = true;
}


public void btnPoint_actionPerformed(ActionEvent e)
{
int num=txtResult.getText().indexOf(".");
if(num<0 && !flag)
txtResult.setText(txtResult.getText()+e.getActionCommand());
if(flag)
flag1=true;
}


public void btnBegin_actionPerformed(ActionEvent e)
{
flag=false;
flag1=false;
flag2=false;
flag3=false;
front="";
behind="";
re="";
txtResult.setText("0");
}


public void btnMinus_actionPerformed(ActionEvent e)
{//取反運(yùn)算符事件處理

if(txtResult.getText().equals("0"))
{//如果文本框內(nèi)容為0
txtResult.setText(txtResult.getText());

}else if(txtResult.getText().indexOf("-")>=0)
{//若文本框中含有負(fù)號
String a=txtResult.getText().replaceAll("-","");
txtResult.setText(a);

}else if(flag)
{
txtResult.setText("0");

}else
{
txtResult.setText("-"+txtResult.getText());
}
}


public void btnCancel_actionPerformed(ActionEvent e)
{//退格事件處理方法
String str=txtResult.getText();

if(str.length() == 1)
{//如文本框中只剩下最后一個字符,將文本框內(nèi)容置為0
txtResult.setText("0");
}

if(str.length()>1)
{
str=str.substring(0,str.length()-1);
txtResult.setText(str);
}
}


public static void main(String[] args)
{
FrameCalculate fc = new FrameCalculate();
fc.setSize(400,310);
fc.setLocation(200,150);
fc.setVisible(true);
}
}



class FrameCalculate_btnCancel_actionAdapter implements ActionListener
{
private FrameCalculate adaptee;

FrameCalculate_btnCancel_actionAdapter(FrameCalculate adaptee)
{
this.adaptee = adaptee;
}


public void actionPerformed(ActionEvent e)
{
adaptee.btnCancel_actionPerformed(e);
}
}



class FrameCalculate_btnMinus_actionAdapter implements ActionListener
{
private FrameCalculate adaptee;

FrameCalculate_btnMinus_actionAdapter(FrameCalculate adaptee)
{
this.adaptee = adaptee;
}


public void actionPerformed(ActionEvent e)
{
adaptee.btnMinus_actionPerformed(e);
}
}



class FrameCalculate_btnBegin_actionAdapter implements ActionListener
{
private FrameCalculate adaptee;

FrameCalculate_btnBegin_actionAdapter(FrameCalculate adaptee)
{
this.adaptee = adaptee;
}


public void actionPerformed(ActionEvent e)
{
adaptee.btnBegin_actionPerformed(e);
}
}



class FrameCalculate_btnPoint_actionAdapter implements ActionListener
{
private FrameCalculate adaptee;

FrameCalculate_btnPoint_actionAdapter(FrameCalculate adaptee)
{
this.adaptee = adaptee;
}


public void actionPerformed(ActionEvent e)
{
adaptee.btnPoint_actionPerformed(e);
}
}



class FrameCalculate_btnEqual_actionAdapter implements ActionListener
{
private FrameCalculate adaptee;

FrameCalculate_btnEqual_actionAdapter(FrameCalculate adaptee)
{
this.adaptee = adaptee;
}


public void actionPerformed(ActionEvent e)
{
adaptee.btnEqual_actionPerformed(e);
}
}



class FrameCalculate_btnIncrease_actionAdapter implements ActionListener
{
private FrameCalculate adaptee;

FrameCalculate_btnIncrease_actionAdapter(FrameCalculate adaptee)
{
this.adaptee = adaptee;
}


public void actionPerformed(ActionEvent e)
{
adaptee.btnIncrease_actionPerformed(e);
}
}



class FrameCalculate_btnZero_actionAdapter implements ActionListener
{
private FrameCalculate adaptee;

FrameCalculate_btnZero_actionAdapter(FrameCalculate adaptee)
{
this.adaptee = adaptee;
}


public void actionPerformed(ActionEvent e)
{
adaptee.btnZero_actionPerformed(e);
}
}



class FrameCalculate_btnNull_actionAdapter implements ActionListener
{
private FrameCalculate adaptee;

FrameCalculate_btnNull_actionAdapter(FrameCalculate adaptee)
{
this.adaptee = adaptee;
}


public void actionPerformed(ActionEvent e)
{
adaptee.btnNull_actionPerformed(e);
}
}

點(diǎn)擊下載源代碼:/Files/daizhenghenry/calculate.rar