java编写的计算器
package Calculator;
import java.awt.*;
import javax.swing.*;
import java.awt.Component.*; import java.awt.TextComponent.*; import java.awt.event.*; //数字按钮
class NumBtn extends JButton {
int number;
Insets insets=new Insets(1,1,1,1);
public NumBtn(int i)
{
super(""+i);
number=i;
setMargin(insets);
}
public int getNum()
{
return number;
}
}
//运算按钮
class OperBtn extends JButton {
Insets insets=new Insets(1,1,1,1);
String operator;
public OperBtn(String str)
{
super(str);
operator=str;
setMargin(insets);
}
public String getOper()
{
return operator;
}
}
//记忆按钮
class FunBtn extends JButton {
Insets insets=new Insets(1,1,1,1);
String function;
public FunBtn(String str)
{
super(str);
function=str;
setMargin(insets);
}
public String getFun()
{
return function;
}
}
//数学按钮
class MathBtn extends JButton {
Insets insets=new Insets(1,1,1,1);
String math;
public MathBtn(String str)
{
super(str);
math=str;
setMargin(insets);
}
public String getMath()
{
return math;
}
}
public class Calculator extends JFrame implements ActionListener
{
Insets insets=new Insets(1,1,1,1);
NumBtn numbtn[];
OperBtn operbtn[];
FunBtn funbtn[];
MathBtn mathbtn[];
String oper[]={"/","*","-","+"};
String fun[]={"MC","MR","MS","M+"};
String math[]={"sqrt","%","1/x","="};
JButton potbtn,pmbtn;
JPanel panel,part1,part2,part3;
JTextField resulttf,memtf;
JButton backspace;
JButton ce;
JButton c;
boolean isNew=true;
boolean isNextNum=false;
String newResult=null;
String newOperator=null;
String saveValue=null;
boolean isMem;
Calculator()
{
super("计算器");
//第一部分:显示结果
part1=new JPanel();
FlowLayout flowLayout1=new FlowLayout();
flowLayout1.setVgap(0);
part1.setLayout(flowLayout1);
resulttf=new JTextField(22);
resulttf.setEditable(false);
resulttf.setHorizontalAlignment(JTextField.TRAILING);
resulttf.setEnabled(true);
part1.add(resulttf);
part1.setBounds(10,25,250,45);
//第二部分:标记是否有存储值以及backspace,ce,c
part2=new JPanel();
FlowLayout flowLayout2=new FlowLayout(FlowLayout.LEFT,10,6);
flowLayout2.setVgap(0);
part2.setLayout(flowLayout2);
memtf=new JTextField(2);
memtf.setEditable(false);
memtf.setHorizontalAlignment(JTextField.CENTER);
memtf.setVisible(true);
backspace=new JButton("Backspace");
backspace.addActionListener(this);
ce=new JButton("CE");
ce.addActionListener(this);
c=new JButton("C");
c.addActionListener(this);
part2.add(memtf);
part2.add(backspace);
part2.add(ce);
part2.add(c);
part2.setBounds(3,70,300,35);
part2.setVisible(true);
//第三部分:各个按钮
part3=new JPanel();
part3.setVisible(true);
part3.setBounds(10,105,250,180);
part3.setLayout(new GridLayout(4,6,5,5));
numbtn=new NumBtn[10];
for(int i=0;i<10;i++)
{
numbtn[i]=new NumBtn(i);
numbtn[i].addActionListener(this);
}
operbtn=new OperBtn[4];
for(int i=0;i<4;i++)
{
operbtn[i]=new OperBtn(oper[i]);
operbtn[i].addActionListener(this);
}
funbtn=new FunBtn[4];
for (int i=0;i<4;i++)
{
funbtn[i]=new FunBtn(fun[i]);
funbtn[i].addActionListener(this);
}
mathbtn=new MathBtn[4];
for(int i=0;i<4;i++)
{
mathbtn[i]=new MathBtn(math[i]);
mathbtn[i].addActionListener(this);
}
potbtn=new JButton(".");
potbtn.addActionListener(this);
pmbtn=new JButton("+/-");
pmbtn.addActionListener(this);
potbtn.setMargin(insets);
pmbtn.setMargin(insets);
part3.add(funbtn[0]);
part3.add(numbtn[7]);
part3.add(numbtn[8]);
part3.add(numbtn[9]);
part3.add(operbtn[0]);
part3.add(mathbtn[0]);
part3.add(funbtn[1]);
part3.add(numbtn[4]);
part3.add(numbtn[5]);
part3.add(numbtn[6]);
part3.add(operbtn[1]);
part3.add(mathbtn[1]);
part3.add(funbtn[2]);
part3.add(numbtn[1]);
part3.add(numbtn[2]);
part3.add(numbtn[3]);
part3.add(operbtn[2]);
part3.add(mathbtn[2]);
part3.add(funbtn[3]);
part3.add(numbtn[0]);
part3.add(pmbtn);
part3.add(potbtn);
part3.add(operbtn[3]);
part3.add(mathbtn[3]);
//将各个部分放置于一个面板
panel=new JPanel();
panel.setLayout(null);
panel.add(part1);
panel.add(part2);
panel.add(part3);
panel.setVisible(true);
//主框架的设置
setLayout(new BorderLayout());
getContentPane().add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(276,325);
setLocation(500,200);
setVisible(true);
setResizable(false);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() instanceof NumBtn)
{
NumBtn bt=(NumBtn)e.getSource();
if(!isNew)
resulttf.setText(resulttf.getText()+bt.getNum());
else
resulttf.setText(""+bt.getNum());
isNew=false;
isNextNum=true;
}
else if(e.getSource() instanceof OperBtn)
{
OperBtn bt=(OperBtn)e.getSource();
if((resulttf.getText()).equals(""))
return;
if((newOperator!=null)&&(isNextNum==true))
{
try
{
double num1=Double.parseDouble(newResult);
double num2=Double.parseDouble(resulttf.getText());
double res=0;
if(newOperator.equals("+"))
res=num1+num2;
else if(newOperator.equals("-"))
res=num1-num2;
else if(newOperator.equals("*"))
res=num1*num2;
else if(newOperator.equals("/"))
res=num1/num2;
resulttf.setText(""+res);
isNextNum=false;
}catch(NumberFormatException e1){}
catch(NullPointerException e2){}
}
newOperator=bt.getOper();
newResult=resulttf.getText();
if(isNextNum)
resulttf.setText("");
isNew=true;
isNextNum=false;
}
else if(e.getSource()==mathbtn[3])
{
if(isNextNum==true)
{
try
{
double num1=Double.parseDouble(newResult);
double num2=Double.parseDouble(resulttf.getText());
double res=0;
if(newOperator.equals("+"))
res=num1+num2;
else if(newOperator.equals("-"))
res=num1-num2;
else if(newOperator.equals("*"))
res=num1*num2;
else if(newOperator.equals("/"))
res=num1/num2;
resulttf.setText(""+res);
}catch(NumberFormatException e1){}
catch(NullPointerException e2){}
}
newOperator=null;
newResult=null;
isNew=true;
isNextNum=false;
}
else if(e.getSource()==potbtn)
{
if(resulttf.getText().indexOf(".")!=-1)
return;
if(!isNew&&resulttf.getText()!="")
resulttf.setText(resulttf.getText()+".");
else
resulttf.setText("0.");
isNew=false;
isNextNum=true;
}
else if(e.getSource()==pmbtn)
{
if(resulttf.getText().indexOf("-")!=-1)
resulttf.setText(""+Math.abs(Double.parseDouble(resulttf.getText())));
else if((resulttf.getText()!="")&&(!isNew))
resulttf.setText("-"+resulttf.getText());
else
{
resulttf.setText("-");
isNew=false;
}
}
else if(e.getSource()==funbtn[2])
{
if(resulttf.getText()!="")
{
saveValue=resulttf.getText();
memtf.setText("M");
isMem=true;
}
}
else if(e.getSource()==funbtn[1])
{
if(isMem)
{
resulttf.setText(saveValue);
isNextNum=true;
}
}
else if(e.getSource()==funbtn[0])
{
memtf.setText("");
isMem=false;
}
else if(e.getSource()==funbtn[3])
{
if(resulttf.getText()!=null)
{
double num1=Double.parseDouble(resulttf.getText());
double num2=Double.parseDouble(saveValue);
double res;
res=num1+num2;
if(isMem)
{
resulttf.setText(""+res);
}
}
}
else if(e.getSource()==mathbtn[0])
{
if(!(resulttf.getText().equalsIgnoreCase("-"))&&(Double.parseDouble(resulttf.getText())>=0)
)
{
double num1=Double.parseDouble(resulttf.getText());
num1=Math.sqrt(num1);
resulttf.setText(""+num1);
}
}
else if(e.getSource()==mathbtn[1])
{
if((resulttf.getText()!=null)&&!(resulttf.getText().equalsIgnoreCase("-")))
{
double num1=Double.parseDouble(resulttf.getText());
num1=num1/100;
resulttf.setText(""+num1);
}
}
else if(e.getSource()==mathbtn[2])
{
if((resulttf.getText()!=null)&&!(resulttf.getText().equalsIgnoreCase("-")))
{
double num1=Double.parseDouble(resulttf.getText());
num1=1/num1;
resulttf.setText(""+num1);
}
}
else if((e.getSource()==backspace)||(e.getSource()==ce))
{
if(resulttf.getText()!=null)
{
String backString;
int i=resulttf.getText().length()-1;
backString=resulttf.getText().substring(0,i);
resulttf.setText(backString);
}
}
else if(e.getSource()==c)
{
resulttf.setText("");
}
}
public static void main(String args[])
{
new Calculator();
}
}
本文档为【java编写的计算器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。