Java計算器?源代碼:
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.*;
/**********************Java計算器?主類*********************/
public?class?SunnyCalculator?implements?ActionListener?{
JFrame?f;
JMenu?mEdit;
JMenu?mView;
JMenu?mHelp;
JMenuItem?mCopy;
JMenuItem?mPaste;
JTextField?tResult;
JButton?bNumber;
JButton?bOperator;
JButton?bOther;
JButton?bM;
boolean?isDouble=false;//是否為實數
int?opFlag=-1;
static?double?t1=0,t2=0,t3=0,result=0;
static?int?opflag1=-1,opflag2=-1,flag=0,resflag=1;
int?preOp,currentOp=0;//標準位
double?op1=0,op2=0;//操作數
double?n3;
StringBuffer?buf=new?StringBuffer(20);
StringBuffer?copyBoard=new?StringBuffer(20);//剪貼板
StringBuffer?memory=new?StringBuffer(20);//M系列
StringBuffer?str=new?StringBuffer();
//Java計算器?構造器
public?SunnyCalculator()
{
f?=?new?JFrame("Sunny計算器_楊梅樹的盔甲");
Container?contentPane?=?f.getContentPane();
/**************************Java計算器?菜單的創建*****************************/
JMenuBar?mBar?=?new?JMenuBar();
mBar.setOpaque(true);
mEdit?=?new?JMenu("編輯(E)");
mEdit.setMnemonic(KeyEvent.VK_E);
mCopy?=?new?JMenuItem("復制(C)");
mEdit.add(mCopy);
mPaste?=?new?JMenuItem("粘貼(P)");
mEdit.add(mPaste);
mView?=?new?JMenu("查看(V)");
mView.setMnemonic(KeyEvent.VK_V);
mView.add(new?JMenuItem("標準型"));
mView.add(new?JMenuItem("科學型"));
mView.addSeparator();
mView.add(new?JMenuItem("查看分組"));
mHelp?=?new?JMenu("幫助(H)");
mHelp.setMnemonic(KeyEvent.VK_H);
mHelp.add(new?JMenuItem("幫助主題"));
mHelp.addSeparator();
mHelp.add(new?JMenuItem("關於計算器"));
mBar.add(mEdit);
mBar.add(mView);
mBar.add(mHelp);
f.setJMenuBar(mBar);
contentPane.setLayout(new?BorderLayout());
JPanel?pTop?=?new?JPanel();
tResult?=?new?JTextField("0.",26);
tResult.setHorizontalAlignment(JTextField.RIGHT);
tResult.setEditable(false);
pTop.add(tResult);
contentPane.add(pTop,BorderLayout.NORTH);
JPanel?pBottom?=?new?JPanel();
pBottom.setLayout(new?BorderLayout());
JPanel?pLeft?=?new?JPanel();
pLeft.setLayout(new?GridLayout(5,1,3,3));
bM?=?new?JButton("?");
bM.setEnabled(false);
pLeft.add(bM);
/*************************Java計算器?功能鍵定義***************************/
bOther?=?new?JButton("MC");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new?Insets(3,2,3,2));
pLeft.add(bOther);
bOther?=?new?JButton("MR");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new?Insets(3,2,3,2));
pLeft.add(bOther);
bOther?=?new?JButton("MS");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new?Insets(3,2,3,2));
pLeft.add(bOther);
bOther?=?new?JButton("M+");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new?Insets(3,2,3,2));
pLeft.add(bOther);
pBottom.add(pLeft,BorderLayout.WEST);
JPanel?pRight?=?new?JPanel();
pRight.setLayout(new?BorderLayout());
JPanel?pUp?=?new?JPanel();
pUp.setLayout(new?GridLayout(1,3,3,0));
bOther?=?new?JButton("BackSpace");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new?Insets(3,0,3,5));
pUp.add(bOther);
bOther?=?new?JButton("CE");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
pUp.add(bOther);
bOther?=?new?JButton("C");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
pUp.add(bOther);
/***************************Java計算器?數字鍵盤區定義**************************/
JPanel?pDown?=?new?JPanel();
pDown.setLayout(new?GridLayout(4,5,3,2));
bNumber?=?new?JButton("7");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
pDown.add(bNumber);
bNumber?=?new?JButton("8");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
pDown.add(bNumber);
bNumber?=?new?JButton("9");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
pDown.add(bNumber);
bOperator?=?new?JButton("/");
bOperator.setForeground(Color.red);
bOperator.addActionListener(this);
bOperator.setMargin(new?Insets(3,0,3,0));
pDown.add(bOperator);
bOperator?=?new?JButton("sqrt");
bOperator.addActionListener(this);
bOperator.setForeground(Color.red);
bOperator.setMargin(new?Insets(3,0,3,0));
pDown.add(bOperator);
bNumber?=?new?JButton("4");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
bNumber.setHorizontalTextPosition(JButton.LEFT);
pDown.add(bNumber);
bNumber?=?new?JButton("5");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
pDown.add(bNumber);
bNumber?=?new?JButton("6");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
pDown.add(bNumber);
bOperator?=?new?JButton("*");
bOperator.setForeground(Color.red);
bOperator.addActionListener(this);
bOperator.setMargin(new?Insets(3,3,3,3));
pDown.add(bOperator);
bOperator?=?new?JButton("%");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new?Insets(3,3,3,3));
pDown.add(bOperator);
bNumber?=?new?JButton("1");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
pDown.add(bNumber);
bNumber?=?new?JButton("2");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
pDown.add(bNumber);
bNumber?=?new?JButton("3");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
pDown.add(bNumber);
bOperator?=?new?JButton("-");
bOperator.setForeground(Color.red);
bOperator.addActionListener(this);
bOperator.setMargin(new?Insets(3,3,3,3));
pDown.add(bOperator);
bOperator?=?new?JButton("1/x");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
pDown.add(bOperator);
bNumber?=?new?JButton("0");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new?Insets(3,3,3,3));
pDown.add(bNumber);
bOperator?=?new?JButton("+/-");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new?Insets(3,3,3,3));
pDown.add(bOperator);
bOperator?=?new?JButton(".");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new?Insets(3,3,3,3));
pDown.add(bOperator);
bOperator?=?new?JButton("+");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new?Insets(3,3,3,3));
pDown.add(bOperator);
bOperator?=?new?JButton("=");
bOperator.setForeground(Color.blue);
bOperator.addActionListener(this);
bOperator.setMargin(new?Insets(3,3,3,3));
pDown.add(bOperator);
pRight.add(pUp,BorderLayout.NORTH);
pRight.add(pDown,BorderLayout.SOUTH);
pBottom.add(pRight,BorderLayout.EAST);
contentPane.add(pBottom,BorderLayout.SOUTH);
f.setSize(new?Dimension(320,256));
f.setResizable(false);
f.setVisible(true);
f.addWindowListener(new?WindowAdapter()
{
public?void?windowClosing(WindowEvent?e)
{
System.exit(0);
}
}
);
}
/************************Java計算器?計算方法區***************************/
public?void?actionPerformed(ActionEvent?e)
{
String?s?=?e.getActionCommand();
if(s.equals("復制(C)"))
{
String?temp?=?tResult.getText().trim();
copyBoard.replace(0,?copyBoard.length(),?temp);
mPaste.setEnabled(true);
}
else?if(s.equals("粘貼(p)"))
{
tResult.setText(copyBoard.toString());?
}
else?if(s.equals("CE"))
{
//如果是CE則清除文本框
tResult.setText("0.");
}
else?if(s.equals("BackSpace"))
{
if(!tResult.getText().trim().equals("0."))
{
//如果文本框中有內容
if(str.length()!=1?&&?str.length()!=0)
{
tResult.setText(str.delete(str.length()-1,str.length()).toString());
}
else
{
tResult.setText("0.");
str.setLength(0);
}
}
op2?=?Double.parseDouble(tResult.getText().trim());
}
else?if(s.equals("C"))
{
//如果是C刪除當前計算
tResult.setText("0.");
op1?=?op2?=?0;
str.replace(0,?str.length(),?"?");
preOp?=?currentOp?=?0;
}
else?if(s.equals("MC"))
{
//如果是MC則清除緩沖區
String?temp?=?"";
memory.replace(0,?memory.length(),?temp);
bM.setText("?");
}
else?if(s.equals("MR"))
{
//如果按鍵為MR則恢復緩沖區的數到文本框
tResult.setText(memory.toString());
}
else?if(s.equals("MS"))
{
//如果按鍵為MS則將文本框的數存入緩沖區
String?s1?=?tResult.getText().trim();
memory.replace(0,?memory.length(),?s1);
bM.setText("M");
}
else?if(s.equals("M+"))
{
//如果按鍵為MS則將文本框值與緩沖區的數相加但不顯示結果
String?temp1?=?tResult.getText().trim();
double?dtemp?=?Double.parseDouble(temp1);
String?temp2?=?memory.toString();
dtemp?+=?Double.parseDouble(temp2);
temp1?=?String.valueOf(dtemp);
memory.replace(0,?memory.length(),?temp1);
}
else?if(s.equals("1/x"))
{
//如果按鍵為1/x則將文本框中的數據為它的倒數
String?temp?=?tResult.getText().trim();
double?dtemp?=?Double.parseDouble(temp);
tResult.setText(""+1/dtemp);
}
else?if(s.equals("sqrt"))
{
//如果按鍵為sqrt則將文本框中的內容求平方根
String?temp?=?tResult.getText().trim();
double?dtemp?=?Double.parseDouble(temp);
tResult.setText(""+Math.sqrt(dtemp));
}
else?if(s.equals("+"))
{
str.setLength(0);
if(currentOp==0)
{
preOp?=?currentOp?=?1;
op2?=?0;
tResult.setText(""+op1);
}
else
{
currentOp?=?preOp;
preOp?=?1;
switch(currentOp){
case?1:
op1?+=?op2;
tResult.setText(""+op1);
break;
case?2:
op1?-=?op2;
tResult.setText(""+op1);
break;
case?3:
op1?*=?op2;
tResult.setText(""+op1);
break;
case?4:
op1?/=?op2;
tResult.setText(""+op1);
break;
}
}
}
else?if(s.equals("-")){?
str.setLength(0);?
if(currentOp==0)?
{?
preOp=currentOp=2;//op1=op2;op2=0;?
tResult.setText(""+op1);?
}?
else?
{?
currentOp?=preOp;?
preOp?=2;?
switch(currentOp){?
case?1:op1=op1+op2;tResult.setText(""+op1);break;?
case?2:op1=op1-op2;tResult.setText(""+op1);break;?
case?3:op1=op1*op2;tResult.setText(""+op1);break;?
case?4:op1=op1/op2;tResult.setText(""+op1);break;?
}?
}?
}?
else?if(s.equals("*"))//*?
{?
str.setLength(0);?
if(currentOp==0)?
{?
preOp=currentOp=3;//op1=op2;op2=1;?
tResult.setText(""+op1);//op1=op2;?
}?
else?
{?
currentOp?=preOp;?
preOp?=3;?
switch(currentOp){?
case?1:op1=op1+op2;tResult.setText(""+op1);break;?
case?2:op1=op1-op2;tResult.setText(""+op1);break;?
case?3:op1=op1*op2;tResult.setText(""+op1);break;?
case?4:op1=op1/op2;tResult.setText(""+op1);break;?
}?
}?
}?
else?if(s.equals("/"))//?/?
{?
str.setLength(0);?
if(currentOp==0)?
{?
preOp=currentOp=4;//op2=1;?
tResult.setText(""+op1);//op1=op2;?
}?
else?
{?
currentOp?=preOp;?
preOp?=4;?
switch(currentOp){?
case?1:op1=op1+op2;tResult.setText(""+op1);break;?
case?2:op1=op1-op2;tResult.setText(""+op1);break;?
case?3:op1=op1*op2;tResult.setText(""+op1);break;?
case?4:op1=op1/op2;tResult.setText(""+op1);break;?
}?
}?
}?
else?if(s.equals("="))//?=?
{?
if(currentOp==0)?
{?
str.setLength(0);?
tResult.setText(""+op2);?
}?
else?
{?
str.setLength(0);?
currentOp?=preOp;?
switch(currentOp){?
case?1:op1=op1+op2;tResult.setText(""+op1);break;?
case?2:op1=op1-op2;tResult.setText(""+op1);break;?
case?3:op1=op1*op2;tResult.setText("&qu