计算器java代码

如题所述

第1个回答  2011-11-18
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;

class Normal{
double i,j;
public Normal(double num1,double num2){
i=num1;
j=num2;
}
public double puls(){
return i+j;
}
public double subtract(){
return i-j;
}
public double multiply(){
return i*j;
}
public double divide(){
return i/j;
}
public double surpuls(){
return i%j;
}
}
class scientific extends Normal{
public scientific(int num1, int num2) {
super(num1, num2);
}
}
public class calc extends JFrame{
public static void main(String[] args) {
viewNormal VN= new viewNormal("normal");

}
}
class viewNormal extends JFrame implements ActionListener{
JPanel jp1 = new JPanel(new GridLayout(4,3,5,5));
JPanel jp2 = new JPanel(new GridLayout(5,1,5,5));
JLabel jl;
JButton[] jb;
JButton jbs,jbo,jba,jbb,jbc,jby;
StringBuffer sb = new StringBuffer();
Normal normal;
int dot=0;
double fnum=0;
double lnum=0;
double result;
String sign=null;
public viewNormal(String title){
setTitle(title);
setLayout(null);
setVisible(true);
setBounds(200,200,305,350);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jb= new JButton[12];
for(int i=0;i<9;i++){
jb[i]=new JButton(""+(i+1));
jp1.add(jb[i]);
jb[i].addActionListener(this);
}
jb[9]=new JButton(".");
jb[10]=new JButton("0");
jb[11]=new JButton("=");
jb[9].addActionListener(this);
jb[10].addActionListener(this);
jb[11].addActionListener(this);
jp1.add(jb[9]);
jp1.add(jb[10]);
jp1.add(jb[11]);
jp1.setBounds(10, 100, 200, 200);
jbs= new JButton("+");jbo= new JButton("-");jba= new JButton("*");
jbb= new JButton("/");jby= new JButton("%");jbc= new JButton("C");
jbs.addActionListener(this);jbo.addActionListener(this);jba.addActionListener(this);
jbb.addActionListener(this);jby.addActionListener(this);jbc.addActionListener(this);
//jp2.add(jby);
jp2.add(jbs);jp2.add(jbo);jp2.add(jba);jp2.add(jbb);jp2.add(jbc);
jp2.setBounds(215, 100, 70, 200);
jl= new JLabel("0",JLabel.RIGHT);
jl.setFont(new Font("Batang",Font.BOLD, 20));
jl.setBorder(new LineBorder(Color.black,2));
jl.setBackground(Color.white);
jl.setBounds(10, 40, 275, 50);
jl.setOpaque(true);
add(jl);
add(jp1);
add(jp2);
}
//+
public void sum(){
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.puls();
result=fnum;
}
//-
private void sub() {
System.out.println(sb.toString());
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.subtract();
result=fnum;
}
//*
private void mul() {
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.multiply();
result=fnum;
}
// /
private void div() {
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.divide();
result=fnum;
}
//%
private void sur() {
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.surpuls();
result=fnum;
}
// =
private void same(){
if(sign.equals("+")){
sum();
}
if(sign.equals("-")){
sub();
}
if(sign.equals("*")){
mul();
}
if(sign.equals("/")){
div();
}
if(sign.equals("%")){
sur();
}
}
//result
public void Result(){
if(result%1!=0)
jl.setText(""+result);
else
{
int i=(int)result;
jl.setText(""+i);
}
}
@Override
public void actionPerformed(ActionEvent e) {
//System.out.println(sb.toString());
// 1~9
for(int i=0;i<9;i++){
if(e.getSource()==jb[i]&&!sb.toString().equals("0")){
sb.append(jb[i].getText());
jl.setText(sb.toString());
}
else if(e.getSource()==jb[i]&&sb.toString().equals("0")){
int d=sb.length();
sb.delete(0, d);
sb.append(jb[i].getText());
jl.setText(sb.toString());
}
}
// 0
if(e.getSource()==jb[10]&&!sb.toString().equals("0")){
sb.append(jb[10].getText());
jl.setText(sb.toString());
}
// .
if(e.getSource()==jb[9]&&dot==0&&!sb.toString().equals("")){
dot++;
sb.append(jb[9].getText());
jl.setText(sb.toString());
}
// =
if(e.getSource()==jb[11]&&!sb.toString().equals("")){
same();
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
// +
if(e.getSource()==jbs&&!sb.toString().equals("")){
if(sign!="+"&&sign!=null)
same();
else
sum();
sign ="+";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//-
if(e.getSource()==jbo&&!sb.toString().equals("")){
if(fnum==0)
fnum=2*Double.parseDouble(sb.toString());
if(sign!="-"&&sign!=null)
same();
else
sub();
sign ="-";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//*
if(e.getSource()==jba&&!sb.toString().equals("")){
if(fnum==0)
fnum=1;
if(sign!="*"&&sign!=null)
same();
else
mul();
sign ="*";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
// /
if(e.getSource()==jbb&&!sb.toString().equals("")){
if(fnum==0)
fnum=Math.pow(Double.parseDouble(sb.toString()),2);
if(sign!="/"&&sign!=null)
same();
else
div();
sign ="/";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//%
// if(e.getSource()==jby&&!sb.toString().equals("")){
// if(fnum==0){
// fnum=Double.parseDouble(sb.toString());
// result=fnum;
// }
// else {
// if(sign!="%"&&sign!=null)
// same();
// else{
// lnum=Double.parseDouble(sb.toString());
// normal=new Normal(fnum,lnum);
// fnum=normal.surpuls();
// result=fnum;
// }
// }
// sign ="%";
// Result();
// int d=sb.length();
// sb.delete(0, d);
// dot=0;
// }
//clear
if(e.getSource()==jbc){
int d=sb.length();
sb.delete(0, d);
jl.setText("0");
dot=0;
fnum=0;
lnum=0;
sign=null;
}
}
}
class viewScientific extends viewNormal{
public viewScientific(String title){
super(title);
setBounds(200,200,800,500);
}
}

//等号以后输入符号用不了, String转 double 本来就有错误,你可以用我的扩展成科学型的。

参考资料:我们作业

第2个回答  2011-11-18
抄别人的死开 要自己写的 才有本事
第3个回答  2011-11-18
不复制。。。。楼主要找个牛人给你在这个框框里写个计算器?画一个还差不多。。
第4个回答  推荐于2017-05-16
这是去年我的期末作业,发给你吧。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
public class Calculate extends JFrame {
private String front = "", behind = ""; //分别用于记录加减乘除运算符之前,之后输入的内容
private String op; //用于记录运算符
private String re;//用于存储运算结果的字符串格式
private boolean flag = false; //用于记录是否按下了运算符
private boolean flag1 = false;//用于判断是否输入了点运算符
private double result;//用于存储运算结果
private boolean flag2 = false;//用于判断是否输入了数字
private boolean flag3 = false;//用于判断是否按下了等号运算符

JPanel contentPane;

JTextField txtResult = new JTextField("0");
JButton btnNull = new JButton("sqrt");
JButton btnFour = new JButton("4");
JButton btnFive = new JButton("5");
JButton btnSix = new JButton("6");
JButton btnDecrease = new JButton("-");
JButton btnBegin = new JButton("C");
JButton btnOne = new JButton("1");
JButton btnTwo = new JButton("2");
JButton btnThree = new JButton("3");
JButton btnMultiply = new JButton("*");
JButton btnCancel = new JButton("←");
JButton btnZero = new JButton("0");
JButton btnMinus = new JButton("+/-");
JButton btnPoint = new JButton(".");
JButton btnDivide = new JButton("/");
JButton btnEqual = new JButton("=");
JButton btnIncrease = new JButton("+");
JButton btnSeven = new JButton("7");
JButton btnEight = new JButton("8");
JButton btnNine = new JButton("9");

public Calculate() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}

private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
this.setResizable(false);
setSize(new Dimension(400, 300));
setTitle("计算器");
txtResult.setEnabled(false);
txtResult.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
txtResult.setEditable(false);

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.addActionListener(new FrameCalculate_btnNull_actionAdapter(this));
btnFour.setBounds(new Rectangle(33, 120, 46, 37));
btnFour.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnFive.setBounds(new Rectangle(101, 120, 46, 37));
btnFive.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnSix.setBounds(new Rectangle(167, 119, 46, 37));
btnSix.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnDecrease.setBounds(new Rectangle(234, 120, 46, 37));
btnDecrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnBegin.setBounds(new Rectangle(298, 121, 46, 37));
btnBegin.setFont(new java.awt.Font("Dialog", Font.PLAIN, 15));

btnBegin.addActionListener(new Calculate_btnBegin_actionAdapter(this));
btnOne.setBounds(new Rectangle(33, 172, 46, 37));
btnOne.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnTwo.setBounds(new Rectangle(101, 172, 46, 37));
btnTwo.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnThree.setBounds(new Rectangle(167, 172, 46, 37));
btnThree.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnMultiply.setBounds(new Rectangle(234, 172, 46, 37));
btnMultiply.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnCancel.setBounds(new Rectangle(298, 172, 46, 37));
btnCancel.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12));

btnCancel.addActionListener(new Calculate_btnCancel_actionAdapter(this));
btnZero.setBounds(new Rectangle(33, 222, 46, 37));
btnZero.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

//加载数字0-9的监听事件
btnZero.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnOne.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnTwo.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnThree.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnFour.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnFive.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnSix.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnSeven.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnEight.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnNine.addActionListener(new Calculate_btnZero_actionAdapter(this));
btnMinus.setBounds(new Rectangle(101, 222, 46, 37));
btnMinus.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));

btnMinus.addActionListener(new Calculate_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.addActionListener(new Calculate_btnPoint_actionAdapter(this));
btnDivide.setBounds(new Rectangle(234, 222, 46, 37));
btnDivide.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnEqual.setBounds(new Rectangle(298, 222, 46, 37));
btnEqual.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnEqual.addActionListener(new Calculate_btnEqual_actionAdapter(this));
btnIncrease.setBounds(new Rectangle(234, 70, 46, 37));
btnIncrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

//加载加减乘除运算符的监听事件
btnIncrease.addActionListener(new
Calculate_btnIncrease_actionAdapter(this));
btnDecrease.addActionListener(new
Calculate_btnIncrease_actionAdapter(this));
btnMultiply.addActionListener(new
Calculate_btnIncrease_actionAdapter(this));
btnDivide.addActionListener(new
Calculate_btnIncrease_actionAdapter(this));
btnSeven.setBounds(new Rectangle(33, 70, 46, 37));
btnSeven.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnEight.setBounds(new Rectangle(101, 70, 46, 37));
btnEight.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

btnNine.setBounds(new Rectangle(167, 70, 46, 37));
btnNine.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

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 btnZero_actionPerformed(ActionEvent e) {
if (flag) { //如果刚刚按下了运算符
txtResult.setText("");
if (flag1) {//判断之前是否输入了点运算符
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(); //得到刚刚按下的运算符
front = txtResult.getText(); //记录加减乘除运算符之前输入的内容
}
else if (flag2) {
ActionEvent ee = new ActionEvent("qq", 1, "pp");
btnEqual_actionPerformed(ee);
op = e.getActionCommand(); //得到刚刚按下的运算符
front = re;
flag2 = false;
} else {
front = txtResult.getText(); //记录加减乘除运算符之前输入的内容
op = e.getActionCommand(); //得到刚刚按下的运算符
}
flag3=false;
flag = true; //记录已经按下了加减乘除运算符的其中一个
}

public void btnEqual_actionPerformed(ActionEvent e) {
if(!flag3)//未曾按下等于运算符
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("除数不能为零");
} 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) {//取反运算符事件处理
if(txtResult.getText().equals("0")){//如果文本框内容为0
txtResult.setText(txtResult.getText());
}else if(txtResult.getText().indexOf("-")>=0){//若文本框中含有负号
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){//如文本框中只剩下最后一个字符,将文本框内容置为0
txtResult.setText("0");
}
if(str.length()>1){
str=str.substring(0,str.length()-1);
txtResult.setText(str);
}
}

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

class Calculate_btnCancel_actionAdapter implements ActionListener {
private Calculate adaptee;
Calculate_btnCancel_actionAdapter(Calculate adaptee) {
this.adaptee = adaptee;
}

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

class Calculate_btnMinus_actionAdapter implements ActionListener {
private Calculate adaptee;
Calculate_btnMinus_actionAdapter(Calculate adaptee) {
this.adaptee = adaptee;
}

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

class Calculate_btnBegin_actionAdapter implements ActionListener {
private Calculate adaptee;
Calculate_btnBegin_actionAdapter(Calculate adaptee) {
this.adaptee = adaptee;
}

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

class Calculate_btnPoint_actionAdapter implements ActionListener {
private Calculate adaptee;
Calculate_btnPoint_actionAdapter(Calculate adaptee) {
this.adaptee = adaptee;
}

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

class Calculate_btnEqual_actionAdapter implements ActionListener {
private Calculate adaptee;
Calculate_btnEqual_actionAdapter(Calculate adaptee) {
this.adaptee = adaptee;
}

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

class Calculate_btnIncrease_actionAdapter implements ActionListener {
private Calculate adaptee;
Calculate_btnIncrease_actionAdapter(Calculate adaptee) {
this.adaptee = adaptee;
}

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

class Calculate_btnZero_actionAdapter implements ActionListener {
private Calculate adaptee;
Calculate_btnZero_actionAdapter(Calculate adaptee) {
this.adaptee = adaptee;
}

public void actionPerformed(ActionEvent e) {
adaptee.btnZero_actionPerformed(e);
}
}本回答被网友采纳
第5个回答  2011-11-18
超朝同学

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网