急求JAVA编写一个计算器

请一定按版面编写好才给分,写好后会追加分数的
不要复制其他题的给我,复制了也不会给分的

你的版面看不到图片哦
我以前写的一个给你了
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DecimalFormat;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculator {
//计算器面板
private JFrame f = new JFrame("Calculator");
//输入面扳
private JPanel inputPanel = new JPanel();
//加减乘除面板
private JPanel operationPanel = new JPanel();
//数字面板
private JPanel buttonsPanel = new JPanel();

//输入数据文本框
private JTextField input = new JTextField(20);

//退格键
private JButton backspace = new JButton("BackSpace");
//清空
private JButton CE = new JButton("CE ");
//删除
private JButton C = new JButton("C ");

//四则运算符号键
private JButton add = new JButton("+");
private JButton sub = new JButton("-");
private JButton mul = new JButton("*");
private JButton div = new JButton("/");

//小数点
private JButton decimal = new JButton(".");
//等号
private JButton equal = new JButton("=");

//数字键
private JButton zero = new JButton("0");
private JButton one = new JButton("1");
private JButton two = new JButton("2");
private JButton three = new JButton("3");
private JButton four = new JButton("4");
private JButton five = new JButton("5");
private JButton six = new JButton("6");
private JButton seven = new JButton("7");
private JButton eight = new JButton("8");
private JButton nine = new JButton("9");

private String num1 = "";//保存第一个运算数字
private String operator = "";//保存运算符号

public static void main(String[] args) {
new Calculator();//new计算器实例
}

public Calculator(){
//添加组件,布局
inputPanel.add(input);
f.add(inputPanel, BorderLayout.NORTH);

operationPanel.add(backspace);
operationPanel.add(CE);
operationPanel.add(C);
f.add(operationPanel, BorderLayout.CENTER);

buttonsPanel.add(add);
buttonsPanel.add(sub);
buttonsPanel.add(mul);
buttonsPanel.add(div);
buttonsPanel.add(one);
buttonsPanel.add(two);
buttonsPanel.add(three);
buttonsPanel.add(zero);
buttonsPanel.add(four);
buttonsPanel.add(five);
buttonsPanel.add(six);
buttonsPanel.add(decimal);
buttonsPanel.add(seven);
buttonsPanel.add(eight);
buttonsPanel.add(nine);
buttonsPanel.add(equal);
buttonsPanel.setLayout(new GridLayout(4, 4));
f.add(buttonsPanel, BorderLayout.SOUTH);

//注册各个组件监听事件
backspace.addMouseListener(new OperationMouseListener());
CE.addMouseListener(new OperationMouseListener());
C.addMouseListener(new OperationMouseListener());
decimal.addMouseListener(new OperationMouseListener());
equal.addMouseListener(new OperationMouseListener());

//注册四则运算监听
add.addMouseListener(new CalcMouseListener());
sub.addMouseListener(new CalcMouseListener());
mul.addMouseListener(new CalcMouseListener());
div.addMouseListener(new CalcMouseListener());

//注册数字监听事件
zero.addMouseListener(new NumberMouseListener());
one.addMouseListener(new NumberMouseListener());
two.addMouseListener(new NumberMouseListener());
three.addMouseListener(new NumberMouseListener());
four.addMouseListener(new NumberMouseListener());
five.addMouseListener(new NumberMouseListener());
six.addMouseListener(new NumberMouseListener());
seven.addMouseListener(new NumberMouseListener());
eight.addMouseListener(new NumberMouseListener());
nine.addMouseListener(new NumberMouseListener());

f.setVisible(true);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private class NumberMouseListener implements MouseListener{

public void mouseClicked(MouseEvent e) {
if(input.getText().trim().equals("0")){//如果文本框已经是0,结果还是0
input.setText(((JButton)e.getSource()).getText().trim());
}else{//否则的话,把0添加到后面,譬如文本框是1,结果就为10
input.setText(input.getText().concat(((JButton)e.getSource()).getText().trim()));
}
}

public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}

private class CalcMouseListener implements MouseListener{
//如果输入的是运算符号,保存第一个结果和运算符号
public void mouseClicked(MouseEvent e) {
num1 = input.getText().trim();input.setText("");
operator = ((JButton)e.getSource()).getText().trim();
}

public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}

private class OperationMouseListener implements MouseListener{

public void mouseClicked(MouseEvent e) {
if(e.getSource() == backspace){//退格键,删除一个直到没有字符删除
String inputText = input.getText();
if(inputText.length() > 0){
input.setText(inputText.substring(0, inputText.length() - 1));
}
}else if(e.getSource() == C){
input.setText("0");//C,清空所有运算数字和符号
num1 = "";
}else if(e.getSource() == CE){
input.setText("0");//CE-->将文本框置为0
}else if(e.getSource() == decimal){
String text = input.getText().trim();
//如果按了小数点,如果文本框已经有小数点,不做任何操作,否则在结果后面加上小数点
if(text.indexOf(".") == -1){
input.setText(text.concat("."));
}
}else if(e.getSource() == equal){
//如果是等号
if(!operator.trim().equals("")){
if(!input.getText().trim().equals("")){
double result = 0D;
if(operator.equals("+")){//执行加法运算
result = Double.parseDouble(num1) + Double.parseDouble(input.getText().trim());
}else if(operator.equals("-")){//减法运算
result = Double.parseDouble(num1) - Double.parseDouble(input.getText().trim());
}else if(operator.equals("*")){//乘法运算
result = Double.parseDouble(num1) * Double.parseDouble(input.getText().trim());
}else if(operator.equals("/")){//除法运算
result = Double.parseDouble(num1) / Double.parseDouble(input.getText().trim());
}

//格式化最终结果,保留两位小数点
input.setText(new DecimalFormat("0.00").format(result));
}
}

}

}

public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-29
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Test extends JFrame implements ActionListener {

double op1 = 0.0;

double op2 = 0.0;

StringBuffer str = new StringBuffer();

// 显示信息
JTextField txtInfo;

int preOp, currentOp = 0;// 标准位

boolean isDouble = false;// 是否为实数
// 清除按钮

JButton btnClean;

JButton btnCE = new JButton("CE");

JButton btnNumber7 = new JButton("7");

JButton btnNumber8 = new JButton("8");

JButton btnNumber9 = new JButton("9");

JButton btnNumber4 = new JButton("4");

JButton btnNumber5 = new JButton("5");

JButton btnNumber6 = new JButton("6");

JButton btnNumber1 = new JButton("1");

JButton btnNumber2 = new JButton("2");

JButton btnNumber3 = new JButton("3");

JButton btnNumber0 = new JButton("0");

JButton btnNumberdian = new JButton(".");

JButton btnNumberadd = new JButton("=");

JButton btnNumbersum = new JButton("+");

JButton btnNumbersub = new JButton("-");

JButton btnNumbermul = new JButton("*");

JButton btnNumberdiv = new JButton("/");

public static void main(String[] args) {
Test ts = new Test();
}

public Test() {
this.setTitle("计算器");
this.setSize(280, 320);
this.setLayout(null);

txtInfo = new JTextField("");
txtInfo.setBounds(1, 5, 215, 50);
txtInfo.setHorizontalAlignment(JTextField.RIGHT);
this.add(txtInfo);

btnCE.setBounds(220, 17, 50, 30);
this.add(btnCE);

txtInfo.setEditable(false);
this.getContentPane().add(txtInfo);

// 数字7
btnNumber7.setBounds(1, 80, 50, 20);
this.add(btnNumber7);

// 数字8
btnNumber8.setBounds(55, 80, 50, 20);
this.add(btnNumber8);
// 数字9
btnNumber9.setBounds(109, 80, 50, 20);
this.add(btnNumber9);

// 数字4
btnNumber4.setBounds(1, 120, 50, 20);
this.add(btnNumber4);

// 数字5
btnNumber5.setBounds(55, 120, 50, 20);
this.add(btnNumber5);

// 数字6
btnNumber6.setBounds(109, 120, 50, 20);
this.add(btnNumber6);
// 数字1
btnNumber1.setBounds(1, 160, 50, 20);
this.add(btnNumber1);

// 数字2
btnNumber2.setBounds(55, 160, 50, 20);
this.add(btnNumber2);
// 数字3
btnNumber3.setBounds(109, 160, 50, 20);
this.add(btnNumber3);
// 数字0
btnNumber0.setBounds(1, 200, 50, 20);
this.add(btnNumber0);

// 点
btnNumberdian.setBounds(55, 200, 50, 20);
this.add(btnNumberdian);
// 等于
btnNumberadd.setBounds(109, 200, 50, 20);
this.add(btnNumberadd);
// 加
btnNumbersum.setBounds(180, 197, 60, 25);
this.add(btnNumbersum);

// 减
btnNumbersub.setBounds(180, 157, 60, 25);
this.add(btnNumbersub);
// 乘
btnNumbermul.setBounds(180, 117, 60, 25);
this.add(btnNumbermul);
// 除
btnNumberdiv.setBounds(180, 77, 60, 25);
this.add(btnNumberdiv);

this.setVisible(true);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnNumber0.addActionListener(this);
btnNumber1.addActionListener(this);
btnNumber2.addActionListener(this);
btnNumber3.addActionListener(this);
btnNumber4.addActionListener(this);
btnNumber5.addActionListener(this);
btnNumber6.addActionListener(this);
btnNumber7.addActionListener(this);
btnNumber8.addActionListener(this);
btnNumber9.addActionListener(this);
btnNumberdian.addActionListener(this);
btnNumberadd.addActionListener(this);
btnNumbersum.addActionListener(this);
btnNumbersub.addActionListener(this);
btnNumbermul.addActionListener(this);
btnNumberdiv.addActionListener(this);
btnCE.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
// 判断点击的是什么按钮
if (s.equals("BackSpace")) {
if (!txtInfo.getText().trim().equals("0.")) {
// 如果文本框中有内容
if (str.length() != 1 && str.length() != 0) {
txtInfo.setText(str.delete(str.length() - 1,

str.length()).toString());
} else {
txtInfo.setText("0.");
str.setLength(2);
}
}
op2 = Double.parseDouble(txtInfo.getText().trim());
} else if (s.equals("CE")) {
// 如果是CE删除当前计算
txtInfo.setText("0.");
op1 = op2 = 0;
str.replace(0, str.length(), " ");
preOp = currentOp = 0;
} else if (s.equals("+")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 1;
op2 = 0;
txtInfo.setText("" + op1);
} else {
currentOp = preOp;
preOp = 1;
switch (currentOp) {
case 1:
op1 += op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 -= op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 *= op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 /= op2;
txtInfo.setText("" + op1);
break;
}
}
} else if (s.equals("-")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 2;// op1=op2;op2=0;
txtInfo.setText("" + op1);
} else {
currentOp = preOp;
preOp = 2;
switch (currentOp) {
case 1:
op1 = op1 + op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
txtInfo.setText("" + op1);
break;
}
}
} else if (s.equals("*")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 3;// op1=op2;op2=1;
txtInfo.setText("" + op1);// op1=op2;
} else {
currentOp = preOp;
preOp = 3;
switch (currentOp) {
case 1:
op1 = op1 + op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
txtInfo.setText("" + op1);
break;
}
}
} else if (s.equals("/")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 4;// op2=1;
txtInfo.setText("" + op1);// op1=op2;
} else {
currentOp = preOp;
preOp = 4;
switch (currentOp) {
case 1:
op1 = op1 + op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
txtInfo.setText("" + op1);
break;
}
}
} else if (s.equals("=")) {
if (currentOp == 0) {
str.setLength(0);
txtInfo.setText("" + op2);
} else {
str.setLength(0);
currentOp = preOp;
switch (currentOp) {
case 1:
op1 = op1 + op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
txtInfo.setText("" + op1);
break;
}
currentOp = 0;
op2 = 0;
}
} else if (s.equals(".")) {
isDouble = true;
if (txtInfo.getText().trim().indexOf('.') != -1)
;
else {
if (txtInfo.getText().trim().equals("0")) {
str.setLength(0);
txtInfo.setText((str.append("0" + s)).toString());
}

else {
txtInfo.setText((str.append(s)).toString());
}
}
} else if (s.equals("0")) {
if (txtInfo.getText().trim().equals("0.")) {
} else {
txtInfo.setText(str.append(s).toString());
op2 = Double.parseDouble(txtInfo.getText().trim());
}
} else {
txtInfo.setText(str.append(s).toString());
op2 = Double.parseDouble(txtInfo.getText().trim());
if (currentOp == 0)
op1 = op2;
}

}

}
第2个回答  2011-12-29
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Test extends JFrame implements ActionListener {

double op1 = 0.0;

double op2 = 0.0;

StringBuffer str = new StringBuffer();

// 显示信息
JTextField txtInfo;

int preOp, currentOp = 0;// 标准位

boolean isDouble = false;// 是否为实数
// 清除按钮

JButton btnClean;

JButton btnCE = new JButton("CE");

JButton btnNumber7 = new JButton("7");

JButton btnNumber8 = new JButton("8");

JButton btnNumber9 = new JButton("9");

JButton btnNumber4 = new JButton("4");

JButton btnNumber5 = new JButton("5");

JButton btnNumber6 = new JButton("6");

JButton btnNumber1 = new JButton("1");

JButton btnNumber2 = new JButton("2");

JButton btnNumber3 = new JButton("3");

JButton btnNumber0 = new JButton("0");

JButton btnNumberdian = new JButton(".");

JButton btnNumberadd = new JButton("=");

JButton btnNumbersum = new JButton("+");

JButton btnNumbersub = new JButton("-");

JButton btnNumbermul = new JButton("*");

JButton btnNumberdiv = new JButton("/");

public static void main(String[] args) {
Test ts = new Test();
}

public Test() {
this.setTitle("计算器");
this.setSize(280, 320);
this.setLayout(null);

txtInfo = new JTextField("");
txtInfo.setBounds(1, 5, 215, 50);
txtInfo.setHorizontalAlignment(JTextField.RIGHT);
this.add(txtInfo);

btnCE.setBounds(220, 17, 50, 30);
this.add(btnCE);

txtInfo.setEditable(false);
this.getContentPane().add(txtInfo);

// 数字7
btnNumber7.setBounds(1, 80, 50, 20);
this.add(btnNumber7);

// 数字8
btnNumber8.setBounds(55, 80, 50, 20);
this.add(btnNumber8);
// 数字9
btnNumber9.setBounds(109, 80, 50, 20);
this.add(btnNumber9);

// 数字4
btnNumber4.setBounds(1, 120, 50, 20);
this.add(btnNumber4);

// 数字5
btnNumber5.setBounds(55, 120, 50, 20);
this.add(btnNumber5);

// 数字6
btnNumber6.setBounds(109, 120, 50, 20);
this.add(btnNumber6);
// 数字1
btnNumber1.setBounds(1, 160, 50, 20);
this.add(btnNumber1);

// 数字2
btnNumber2.setBounds(55, 160, 50, 20);
this.add(btnNumber2);
// 数字3
btnNumber3.setBounds(109, 160, 50, 20);
this.add(btnNumber3);
// 数字0
btnNumber0.setBounds(1, 200, 50, 20);
this.add(btnNumber0);

// 点
btnNumberdian.setBounds(55, 200, 50, 20);
this.add(btnNumberdian);
// 等于
btnNumberadd.setBounds(109, 200, 50, 20);
this.add(btnNumberadd);
// 加
btnNumbersum.setBounds(180, 197, 60, 25);
this.add(btnNumbersum);

// 减
btnNumbersub.setBounds(180, 157, 60, 25);
this.add(btnNumbersub);
// 乘
btnNumbermul.setBounds(180, 117, 60, 25);
this.add(btnNumbermul);
// 除
btnNumberdiv.setBounds(180, 77, 60, 25);
this.add(btnNumberdiv);

this.setVisible(true);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnNumber0.addActionListener(this);
btnNumber1.addActionListener(this);
btnNumber2.addActionListener(this);
btnNumber3.addActionListener(this);
btnNumber4.addActionListener(this);
btnNumber5.addActionListener(this);
btnNumber6.addActionListener(this);
btnNumber7.addActionListener(this);
btnNumber8.addActionListener(this);
btnNumber9.addActionListener(this);
btnNumberdian.addActionListener(this);
btnNumberadd.addActionListener(this);
btnNumbersum.addActionListener(this);
btnNumbersub.addActionListener(this);
btnNumbermul.addActionListener(this);
btnNumberdiv.addActionListener(this);
btnCE.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
// 判断点击的是什么按钮
if (s.equals("BackSpace")) {
if (!txtInfo.getText().trim().equals("0.")) {
// 如果文本框中有内容
if (str.length() != 1 && str.length() != 0) {
txtInfo.setText(str.delete(str.length() - 1,

str.length()).toString());
} else {
txtInfo.setText("0.");
str.setLength(2);
}
}
op2 = Double.parseDouble(txtInfo.getText().trim());
} else if (s.equals("CE")) {
// 如果是CE删除当前计算
txtInfo.setText("0.");
op1 = op2 = 0;
str.replace(0, str.length(), " ");
preOp = currentOp = 0;
} else if (s.equals("+")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 1;
op2 = 0;
txtInfo.setText("" + op1);
} else {
currentOp = preOp;
preOp = 1;
switch (currentOp) {
case 1:
op1 += op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 -= op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 *= op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 /= op2;
txtInfo.setText("" + op1);
break;
}
}
} else if (s.equals("-")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 2;// op1=op2;op2=0;
txtInfo.setText("" + op1);
} else {
currentOp = preOp;
preOp = 2;
switch (currentOp) {
case 1:
op1 = op1 + op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
txtInfo.setText("" + op1);
break;
}
}
} else if (s.equals("*")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 3;// op1=op2;op2=1;
txtInfo.setText("" + op1);// op1=op2;
} else {
currentOp = preOp;
preOp = 3;
switch (currentOp) {
case 1:
op1 = op1 + op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
txtInfo.setText("" + op1);
break;
}
}
} else if (s.equals("/")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 4;// op2=1;
txtInfo.setText("" + op1);// op1=op2;
} else {
currentOp = preOp;
preOp = 4;
switch (currentOp) {
case 1:
op1 = op1 + op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
txtInfo.setText("" + op1);
break;
}
}
} else if (s.equals("=")) {
if (currentOp == 0) {
str.setLength(0);
txtInfo.setText("" + op2);
} else {
str.setLength(0);
currentOp = preOp;
switch (currentOp) {
case 1:
op1 = op1 + op2;
txtInfo.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
txtInfo.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
txtInfo.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
txtInfo.setText("" + op1);
break;
}
currentOp = 0;
op2 = 0;
}
} else if (s.equals(".")) {
isDouble = true;
if (txtInfo.getText().trim().indexOf('.') != -1)
;
else {
if (txtInfo.getText().trim().equals("0")) {
str.setLength(0);
txtInfo.setText((str.append("0" + s)).toString());
}

else {
txtInfo.setText((str.append(s)).toString());
}
}
} else if (s.equals("0")) {
if (txtInfo.getText().trim().equals("0.")) {
} else {
txtInfo.setText(str.append(s).toString());
op2 = Double.parseDouble(txtInfo.getText().trim());
}
} else {
txtInfo.setText(str.append(s).toString());
op2 = Double.parseDouble(txtInfo.getText().trim());
if (currentOp == 0)
op1 = op2;
}

}

}
第3个回答  2012-01-09
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import java.io.* ;
import javax.swing.*;
import java.util.Vector;
// 定义监听窗口
public class killf本回答被网友采纳
第4个回答  2011-12-30
难啊