写了三百多行,基本实现了加减乘除,平方,次方,开方,倒数,相反数这些功能,仅供参考,希望能帮到大家
package JiSuanQiDemo;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class jiemian extends JFrame implements ActionListener{
//打开一个窗口,标题为“计算器”
JFrame f =new JFrame("计算器");
//创建一个画板,将组件放在这个画板上
Panel p = new Panel();
/**
* 定义功能键和数字键
*/
Button keyCE,keyC,keyDelete,keyDivision;
Button keyRoot,keyOne,keyTwo,keyThere,keyRide;
Button keySquare,keyFour,keyFive,keySix,keyReduce;
Button keyCubic,keySeven,keyEight,keyNine,keyAddition;
Button keyReciprocal,keyPlusOrMinus,keyZero,keySpot,keyEqual;
TextField text;
//初始化算术和和运算符
double num=0,sum=0,find=1;
int find2=1;
char c='+';
/**
* 面板设计
*/
public void jianli() {
// 创建按钮,设计面板
//初始化画板,这样组件的大小才可以改变
p.setLayout(null);
//创建文本行,用来显示计算结果
text = new TextField("0");
//设置文本行位置大小
text.setBounds(10, 10, 230, 20);
//将文本行放入到画板中
p.add(text);
//创建一个按钮
keyCE=new Button("CE");
//初始化大小位置
keyCE.setBounds(60, 30, 50, 50);
//放入到画板里
p.add(keyCE);
//添加监听器
keyCE.addActionListener(this);
keyC=new Button("C");
keyC.setBounds(110, 30, 50, 50);
p.add(keyC);
keyC.addActionListener(this);
keyDelete =new Button("delete");
keyDelete.setBounds(160, 30, 50, 50);
p.add(keyDelete);
keyDelete.addActionListener(this);
keyDivision =new Button("÷");
keyDivision.setBounds(210, 30, 50, 50);
p.add(keyDivision);
keyDivision.addActionListener(this);
keyRoot=new Button("√");
keyRoot.setBounds(10, 80, 50, 50);
p.add(keyRoot);
keyRoot.addActionListener(this);
keyOne=new Button("1");
keyOne.setBounds(60, 80, 50, 50);
p.add(keyOne);
keyOne.addActionListener(this);
keyTwo=new Button("2");
keyTwo.setBounds(110, 80, 50, 50);
p.add(keyTwo);
keyTwo.addActionListener(this);
keyThere =new Button("3");
keyThere.setBounds(160, 80, 50, 50);
p.add(keyThere);
keyThere.addActionListener(this);
keyRide =new Button("*");
keyRide.setBounds(210, 80, 50, 50);
p.add(keyRide);
keyRide.addActionListener(this);
keySquare=new Button("x²");
keySquare.setBounds(10, 130, 50, 50);
p.add(keySquare);
keySquare.addActionListener(this);
keyFour=new Button("4");
keyFour.setBounds(60, 130, 50, 50);
p.add(keyFour);
keyFour.addActionListener(this);
keyFive=new Button("5");
keyFive.setBounds(110, 130, 50, 50);
p.add(keyFive);
keyFive.addActionListener(this);
keySix =new Button("6");
keySix.setBounds(160, 130, 50, 50);
p.add(keySix);
keySix.addActionListener(this);
keyReduce =new Button("-");
keyReduce.setBounds(210, 130, 50, 50);
p.add(keyReduce);
keyReduce.addActionListener(this);
keyCubic=new Button("x³");
keyCubic.setBounds(10, 180, 50, 50);
p.add(keyCubic);
keyCubic.addActionListener(this);
keySeven=new Button("7");
keySeven.setBounds(60, 180, 50, 50);
p.add(keySeven);
keySeven.addActionListener(this);
keyEight=new Button("8");
keyEight.setBounds(110, 180, 50, 50);
p.add(keyEight);
keyEight.addActionListener(this);
keyNine =new Button("9");
keyNine.setBounds(160, 180, 50, 50);
p.add(keyNine);
keyNine.addActionListener(this);
keyAddition =new Button("+");
keyAddition.setBounds(210, 180, 50, 50);
p.add(keyAddition);
keyAddition.addActionListener(this);
keyReciprocal=new Button("1/x");
keyReciprocal.setBounds(10, 230, 50, 50);
p.add(keyReciprocal);
keyReciprocal.addActionListener(this);
keyPlusOrMinus=new Button("±");
keyPlusOrMinus.setBounds(60, 230, 50, 50);
p.add(keyPlusOrMinus);
keyPlusOrMinus.addActionListener(this);
keyZero=new Button("0");
keyZero.setBounds(110, 230, 50, 50);
p.add(keyZero);
keyZero.addActionListener(this);
keySpot =new Button("·");
keySpot.setBounds(160, 230, 50, 50);
p.add(keySpot);
keySpot.addActionListener(this);
keyEqual =new Button("=");
keyEqual.setBounds(210, 230, 50, 50);
p.add(keyEqual);
keyEqual.addActionListener(this);
//text.setText("1");
f.add(p);
f.setBounds(200,200,280,330);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
/**
* 功能实现,获取运算符,和数据
*/
public void actionPerformed(ActionEvent e) {
if(e.getSource()==keyCE) {
sum=0;
num=0;
find=1;
find2=1;
c='+';
text.setText("0");
}else if(e.getSource()==keyC) {
sum=0;
num=0;
find=1;
find2=1;
c='+';
text.setText("0");
}else if(e.getSource()==keyDelete) {
String s = text.getText();
int i=s.length();
if(i>1) {
s = s.substring(0, i - 1);
text.setText(s);
}else
text.setText("0");
}else if(e.getSource()==keyDivision) {
sum=Calculation(sum,c,num);
num=0;
find=1;
find2=1;
String s=""+sum;
text.setText(s);
c='/';
}else if(e.getSource()==keyRoot) {
num=Math.sqrt(num);
find=1;
}else if(e.getSource()==keyOne) {
if(find==1)
num=num*10+1;
else{
num=num+1*find;
find=find*0.1;
}handleNumber("1");
}else if(e.getSource()==keyTwo) {
if(find==1)
num=num*10+2;
else{
num=num+2*find;
find=find*0.1;
}handleNumber("2");
}else if(e.getSource()==keyThere) {
if(find==1)
num=num*10+3;
else{
num=num+3*find;
find=find*0.1;
}handleNumber("3");
}else if(e.getSource()==keyRide) {
sum=Calculation(sum,c,num);
num=0;
find=1;
find2=1;
String s=""+sum;
text.setText(s);
c='*';
}else if(e.getSource()==keySquare) {
num=Math.pow(num, 2);
String s=""+num;
find=1;
find2=1;
}else if(e.getSource()==keyFour) {
if(find==1)
num=num*10+4;
else{
num=num+4*find;
find=find*0.1;
}handleNumber("4");
}else if(e.getSource()==keyFive) {
if(find==1)
num=num*10+5;
else{
num=num+5*find;
find=find*0.1;
}handleNumber("5");
}else if(e.getSource()==keySix) {
if(find==1)
num=num*10+6;
else{
num=num+6*find;
find=find*0.1;
}handleNumber("6");
}else if(e.getSource()==keyReduce) {
sum=Calculation(sum,c,num);
num=0;
find=1;
find2=1;
String s=""+sum;
text.setText(s);
c='-';
}else if(e.getSource()==keyCubic) {
num=Math.pow(num,3);
find=1;
find2=1;
}else if(e.getSource()==keySeven) {
if(find==1)
num=num*10+7;
else{
num=num+7*find;
find=find*0.1;
}handleNumber("7");
}else if(e.getSource()==keyEight) {
if(find==1)
num=num*10+8;
else{
num=num+8*find;
find=find*0.1;
}handleNumber("8");
}else if(e.getSource()==keyNine) {
if(find==1)
num=num*10+9;
else{
num=num+9*find;
find=find*0.1;
}handleNumber("9");
}else if(e.getSource()==keyAddition) {
sum=Calculation(sum,c,num);
num=0;
find=1;
find2=1;
String s=""+sum;
text.setText(s);
c='+';
}else if(e.getSource()==keyReciprocal) {
num=1/num;
sum=Calculation(sum,c,num);
num=0;
find=1;
find2=1;
}else if(e.getSource()==keyPlusOrMinus) {
num=-num;
String s =null;
s=""+num;
text.setText(s);
sum=Calculation(sum,c,num);
num=0;
find=1;
find2=1;
}else if(e.getSource()==keyZero) {
if(find==1)
num=num*10;
else{
find=find*0.1;
}handleNumber("0");
}else if(e.getSource()==keySpot) {
find=0.1;
handleNumber(".");
}else if(e.getSource()==keyEqual) {
sum=Calculation(sum,c,num);
String sc=null;
sc=""+sum;
text.setText(sc);
find=1;
find2=1;
num=0;
sum=0;
c='+';
}
}
/**
* 完成加减乘除运算
* @param sum
* @param c
* @param y
* @return
*/
public double Calculation(double sum,char c,double y) {
switch(c) {
case '+':
sum+=y;
break;
case '-':
sum-=y;
break;
case '*':
sum*=y;
break;
case '/':
sum/=y;
break;
default:
break;
}
return sum;
}
/**
* 实现文本行显示内容
* @param x
*/
public void handleNumber(String x) {
if(find2==1) {
text.setText(x);
find2=-1;
}else {
text.setText(text.getText()+x);
}
}
}
public class Test extends JFrame {
public static void main(String args[]) {
jiemian j = new jiemian();
j.jianli();
}
}