用java实现一个简单的计算器。

用Java编写一个简单的计算器程序~

import java.awt.*;
import java.awt.event.*;

public class CalcAppDemo extends Frame{
private TextField t_result;
private Panel p_main; //主面板
private Panel p_num; //数字面板
private Panel p_oper; //操作符面板
private Panel p_show; //显示面板
private Button b_num[]; //数字按钮
private Button b_oper[]; //操作符面板

public CalcAppDemo(String title){
setTitle(title);
t_result = new TextField("0.0", 21);
p_main = new Panel();
p_num = new Panel();
p_oper = new Panel();
p_show = new Panel();
p_main.setLayout(new BorderLayout());
p_num.setLayout(new GridLayout(4, 3, 1, 1));
p_oper.setLayout(new GridLayout(4, 2, 1, 1));

b_num = new Button[12];
for(int i=0; i<9; i++)
{
b_num[i] = new Button(new Integer(i+1).toString());
}
b_num[9] = new Button("0");
b_num[10] = new Button("cls");
b_num[11] = new Button(".");
for(int i=0; i<12; i++)
{
p_num.add(b_num[i]);
}

b_oper = new Button[8];
b_oper[0] = new Button("+");
b_oper[1] = new Button("-");
b_oper[2] = new Button("*");
b_oper[3] = new Button("/");
b_oper[4] = new Button("pow");
b_oper[5] = new Button("sqrt");
b_oper[6] = new Button("+/-");
b_oper[7] = new Button("=");
for(int i=0; i<8; i++) //
{
p_oper.add(b_oper[i]);
}

t_result.setEditable(false);
p_show.add(t_result, BorderLayout.NORTH);
p_main.add(p_show, BorderLayout.NORTH);
p_main.add(p_num, BorderLayout.WEST);
p_main.add(p_oper, BorderLayout.EAST);
this.add(p_main, BorderLayout.CENTER);
setSize(400, 400);
setResizable(false);
pack();

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
ButtonListener b1 = new ButtonListener();
for(int i=0; i<12; i++)
{
b_num[i].addActionListener(b1);
}
for(int i=0; i<8; i++)
{
b_oper[i].addActionListener(b1);
}
}

class ButtonListener implements ActionListener
{
private String lastOp; //存储上一此操作符
private String strVal; //存储数字对应的字符串
private double total; //总数
private double number; //存储新输入的数
private boolean firsttime; //判断是否第一次按下的是操作符按钮
private boolean operatorPressed;//判断是否已经按过操作符按钮

ButtonListener()
{
firsttime = true;
strVal = "";
}

//事件处理器
public void actionPerformed(ActionEvent e)
{
String s = ((Button)e.getSource()).getLabel().trim();

if(Character.isDigit(s.charAt(0)))
{//判断是操作数还是操作符
handleNumber(s);
}
else
{
calculate(s);
}
}

//判断是一元操作符还是二元操作符,并根据操作符类型做计算
void calculate(String op)
{
operatorPressed = true;

if(firsttime&&! isUnary(op))
{
total = getNumberOnDisplay();
firsttime = false;
}
if(isUnary(op))
{
handleUnaryOp(op);
}
else if(lastOp != null)
{
handleBinaryOp(lastOp);
}
if(! isUnary(op))
{
lastOp = op;
}
}

//判断是否一元操作符
boolean isUnary(String s)
{
return s.equals("=")
||s.equals("cls")||s.equals("sqrt")
||s.equals("+/-")||s.equals(".");
}

//处理一元操作符
void handleUnaryOp(String op)
{
if(op.equals("+/-"))
{//
number = negate(getNumberOnDisplay() + "");
t_result.setText("");
t_result.setText(number + "");
return;
}else if(op.equals("."))
{
handleDecPoint();
return;
}else if(op.equals("sqrt"))
{
number = Math.sqrt(getNumberOnDisplay());
t_result.setText("");
t_result.setText(number + "");
return;
}else if(op.equals("="))
{//
if(lastOp!= null && !isUnary(lastOp))
{
handleBinaryOp(lastOp);
}
lastOp = null;
firsttime = true;
return;
}else
{
clear();
}
}

//处理二元运算符
void handleBinaryOp(String op)
{
if(op.equals("+"))
{
total +=number;
}else if(op.equals("-"))
{
total -=number;
}else if(op.equals("*"))
{
total *=number;
}else if(op.equals("/"))
{
try
{
total /=number;
}catch(ArithmeticException ae){}
}else if(op.equals("pow"))
total = Math.pow(total, number);
//t_result.setText("");
lastOp = null;
// strVal = "";
number = 0;
t_result.setText(total + "");
}

//该方法用于处理数字按钮
void handleNumber(String s)
{
if(!operatorPressed)
{
strVal += s;
}else
{
operatorPressed = false;
strVal = s;
}
//
number = new Double(strVal).doubleValue();
t_result.setText("");
t_result.setText(strVal);
}

//该方法用于按下"."按钮
void handleDecPoint()
{
operatorPressed = false;
//
if(strVal.indexOf(".")<0)
{
strVal += ".";
}
t_result.setText("");
t_result.setText(strVal);
}

//该方法用于将一个数求反
double negate(String s)
{
operatorPressed = false;
//如果是一个整数,去掉小数点后面的0
if(number == (int)number)
{
s = s.substring(0,s.indexOf("."));
}

//如果无"-"增加在该数的前面
if(s.indexOf("-")<0)
{
strVal = "-" + s;
}
else
{
strVal = s.substring(1);
}
return new Double(strVal).doubleValue();
}

//将显示框中的值转换成Double
double getNumberOnDisplay()
{
return new Double(t_result.getText()).doubleValue();
}

//清除屏幕并设置所有的标识
void clear()
{
firsttime = true;
lastOp = null;
strVal = "";
total = 0;
number = 0;
t_result.setText("0");
}
}


public static void main(String[] args) {
CalcAppDemo c = new CalcAppDemo("简单的计算器程序");
c.setVisible(true);
}

}

1.窗体
package Calc;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

/**
*
* 计算器程序
*
*/
public class CalcFrame extends JFrame {
JButton[] buttons = new JButton[16];// 16个按钮

StringBuffer sb = null;//

JTextField text1 = null;// 计算器结果显示框

String no1 = null;

String sign = null;// 表示+-*/符号

String[] s = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "-",
"*", "/", "=", "C" };// 面板上的字符

public CalcFrame() {
setTitle("计算器");
setResizable(false);
setBounds(200, 200, 300, 350);
setLayout(null);

sb = new StringBuffer();
text1 = new JTextField();
text1.setBounds(10, 10, 250, 30);// 设置位置
text1.setFont(new Font("Arial", Font.PLAIN, 20));// 设置字体
text1.setForeground(Color.RED);// 设置颜色
add(text1);
for (int i = 0; i < s.length; i++) {

buttons[i] = new JButton(s[i]);
buttons[i].setFont(new Font("Serif", Font.BOLD, 18));
add(buttons[i]);
}// 生成面板上的按钮.

buttons[0].setBounds(10, 50, 50, 40);
buttons[0].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(0);
text1.setText(sb.toString());
}

});
buttons[1].setBounds(70, 50, 50, 40);
buttons[1].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(1);
text1.setText(sb.toString());
}

});
buttons[2].setBounds(130, 50, 50, 40);
buttons[2].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(2);
text1.setText(sb.toString());
}

});
buttons[3].setBounds(190, 50, 50, 40);
buttons[3].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(3);
text1.setText(sb.toString());
}

});
buttons[4].setBounds(10, 100, 50, 40);
buttons[4].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(4);
text1.setText(sb.toString());
}

});
buttons[5].setBounds(70, 100, 50, 40);
buttons[5].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(5);
text1.setText(sb.toString());
}

});
buttons[6].setBounds(130, 100, 50, 40);
buttons[6].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(6);
text1.setText(sb.toString());
}

});
buttons[7].setBounds(190, 100, 50, 40);
buttons[7].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(7);
text1.setText(sb.toString());
}

});
buttons[8].setBounds(10, 150, 50, 40);
buttons[8].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(8);
text1.setText(sb.toString());
}

});
buttons[9].setBounds(70, 150, 50, 40);
buttons[9].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.append(9);
text1.setText(sb.toString());
}

});
buttons[10].setBounds(130, 150, 50, 40);
buttons[10].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sign = "+";
no1 = text1.getText();
sb.delete(0, sb.capacity());

}
});
buttons[11].setBounds(190, 150, 50, 40);
buttons[11].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sign = "-";
no1 = text1.getText();
sb.delete(0, sb.capacity());

}
});
buttons[12].setBounds(10, 200, 50, 40);
buttons[12].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sign = "*";
no1 = text1.getText();
sb.delete(0, sb.capacity());

}
});
buttons[13].setBounds(70, 200, 50, 40);
buttons[13].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sign = "/";
no1 = text1.getText();
sb.delete(0, sb.capacity());

}
});
buttons[14].setForeground(Color.RED);
buttons[14].setBounds(130, 200, 50, 40);
buttons[14].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
int sum = 0;//最终结果
if (sign.equals("+")) {
int no2 = Integer.parseInt(no1);//取得前一个数

int no3 = Integer.parseInt(text1.getText());//取得现在的数

sum = no2 + no3;//累加

text1.setText(String.valueOf(sum));

}
if (sign.equals("-")) {
int no2 = Integer.parseInt(no1);

int no3 = Integer.parseInt(text1.getText());

sum = no2 - no3;

text1.setText(String.valueOf(sum));

}
if (sign.equals("*")) {
int no2 = Integer.parseInt(no1);

int no3 = Integer.parseInt(text1.getText());

sum = no2 * no3;

text1.setText(String.valueOf(sum));

}

if (sign.equals("/")) {
int no2 = Integer.parseInt(no1);

int no3 = Integer.parseInt(text1.getText());

sum = no2 / no3;

text1.setText(String.valueOf(sum));

}

}

});
buttons[15].setBounds(190, 200, 50, 40);
buttons[15].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
sb.delete(0, sb.capacity());//清除sb的内容
text1.setText("");//结果框设置为空
}
});

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//响应关闭窗口
setVisible(true);//显示窗口
}
}

2.主程序类
package Calc;

public class CalcTest {

public static void main(String[] args) {
CalcFrame f = new CalcFrame();

}

}

/*

 * @(#)JCalculator.java 1.00 06/17/2015

 */

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

/**

 * A simple calculator program.

 * <p>I saw this program in a QQ group, and help a friend correct it.</p>

 *

 * @author Singyuen Yip

 * @version 1.00 12/29/2009

 * @see JFrame

 * @see ActionListener

 */

public class JCalculator extends JFrame implements ActionListener {

    /**

     * Serial Version UID

     */

    private static final long serialVersionUID = -169068472193786457L;

    /**

     * This class help close the Window.

     * @author Singyuen Yip

     *

     */

    private class WindowCloser extends WindowAdapter {

       public void windowClosing(WindowEvent we) {

           System.exit(0);

       }

    }

 

    int i;

    // Strings for Digit & Operator buttons.

    private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*","1",

           "2", "3", "-", ".", "0", "=", "+" };

    // Build buttons.

    JButton[] buttons = new JButton[str.length];

    // For cancel or reset.

    JButton reset = new JButton("CE");

    // Build the text field to show the result.

    JTextField display = new JTextField("0");

   

    /**

     * Constructor without parameters.

     */

    public JCalculator() {

       super("Calculator");

       // Add a panel.

       JPanel panel1 = new JPanel(new GridLayout(4, 4));

       // panel1.setLayout(new GridLayout(4,4));

       for (i = 0; i < str.length; i++) {

           buttons[i] = new JButton(str[i]);

           panel1.add(buttons[i]);

       }

       JPanel panel2 = new JPanel(new BorderLayout());

       // panel2.setLayout(new BorderLayout());

       panel2.add("Center", display);

       panel2.add("East", reset);

       // JPanel panel3 = new Panel();

       getContentPane().setLayout(new BorderLayout());

       getContentPane().add("North", panel2);

       getContentPane().add("Center", panel1);

       // Add action listener for each digit & operator button.

       for (i = 0; i < str.length; i++)

           buttons[i].addActionListener(this);

       // Add listener for "reset" button.

       reset.addActionListener(this);

       // Add listener for "display" button.

       display.addActionListener(this);

       // The "close" button "X".

       addWindowListener(new WindowCloser());

       // Initialize the window size.

       setSize(800, 800);

       // Show the window.

       // show(); Using show() while JDK version is below 1.5.

       setVisible(true);

       // Fit the certain size.

       pack();

    }  

   

    public void actionPerformed(ActionEvent e) {

       Object target = e.getSource();

       String label = e.getActionCommand();

       if (target == reset)

           handleReset();

       else if ("0123456789.".indexOf(label) > 0)

           handleNumber(label);

       else

           handleOperator(label);

    }

    // Is the first digit pressed?

    boolean isFirstDigit = true;

    /**

     * Number handling.

     * @param key the key of the button.

     */

    public void handleNumber(String key) {

       if (isFirstDigit)

           display.setText(key);

       else if ((key.equals(".")) && (display.getText().indexOf(".") < 0))

           display.setText(display.getText() + ".");

       else if (!key.equals("."))

           display.setText(display.getText() + key);

       isFirstDigit = false;

    }

   

    /**

     * Reset the calculator.

     */

    public void handleReset() {

       display.setText("0");

       isFirstDigit = true;

       operator = "=";

    }

 

    double number = 0.0;

    String operator = "=";

   

    /**

     * Handling the operation.

     * @param key pressed operator's key.

     */

    public void handleOperator(String key) {

       if (operator.equals("+"))

           number += Double.valueOf(display.getText());

       else if (operator.equals("-"))

           number -= Double.valueOf(display.getText());

       else if (operator.equals("*"))

           number *= Double.valueOf(display.getText());

       else if (operator.equals("/"))

           number /= Double.valueOf(display.getText());

       else if (operator.equals("="))

           number = Double.valueOf(display.getText());

       display.setText(String.valueOf(number));

       operator = key;

       isFirstDigit = true;

    }

   

    public static void main(String[] args) {

       new JCalculator();

    }

}


运行界面:



说实在的,你写的这个计算器不怎么样。特别是布局。
我给你一个很简单的吧。你自己学习一下。。

import java.awt.*;
import java.awt.event.*;
/**
*
* @author zzj
*
*/
public class Jisuanqi extends WindowAdapter {
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel();
TextField txt;
private Button[] b = new Button[17];
private String ss[] = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2",
"3", "*", "清空", "0", "=", "/", "关闭" };
static double a;
static String s, str;//定义变量 创建对像

public static void main(String args[]) {
(new Jisuanqi()).frame();
}

public void frame() {
Frame fm = new Frame("简单计算器");
for (int i = 0; i <= 16; i++) {
b[i] = new Button(ss[i]);
}
for (int i = 0; i <= 15; i++) {
p2.add(b[i]);
} //创建按钮 并添加到P2
b[16].setBackground(Color.yellow);
txt = new TextField(15);
txt.setEditable(false);
for (int i = 0; i <= 16; i++) {
b[i].addActionListener(new buttonlistener());//添加监听器
}
b[16].addActionListener(new close());
fm.addWindowListener(this);
fm.setBackground(Color.red);
p1.setLayout(new BorderLayout());
p1.add(txt, "North");
p2.setLayout(new GridLayout(4, 4));
p3.setLayout(new BorderLayout());
p3.add(b[16]);
fm.add(p1, "North");
fm.add(p2, "Center");
fm.add(p3, "South");
fm.pack();
fm.setVisible(true);//都是些窗中设置 添加相关组件和监听器
}

public void windowClosing(WindowEvent e) {
System.exit(0);//退出系统
}

class buttonlistener implements ActionListener {//编写监听器事件 通过按键得出给果
public void actionPerformed(ActionEvent e) {
Button btn = (Button) e.getSource();
if (btn.getLabel() == "=") {
jisuan();
str = String.valueOf(a);
txt.setText(str);
s = "";
} else if (btn.getLabel() == "+") {
jisuan();
txt.setText("");
s = "+";
} else if (btn.getLabel() == "-") {
jisuan();
txt.setText("");
s = "-";
} else if (btn.getLabel() == "/") {
jisuan();
txt.setText("");
s = "/";

} else if (btn.getLabel() == "*") {
jisuan();
txt.setText("");
s = "*";
} else {
txt.setText(txt.getText() + btn.getLabel());

if (btn.getLabel() == "清空")
txt.setText("");
}
}

public void jisuan() {//编写具体计算方法
if (s == "+")
a += Double.parseDouble(txt.getText());
else if (s == "-")
a -= Double.parseDouble(txt.getText());
else if (s == "*")
a *= Double.parseDouble(txt.getText());
else if (s == "/")
a /= Double.parseDouble(txt.getText());
else
a = Double.parseDouble(txt.getText());
}
}
}

class close implements ActionListener {//退出
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}

- -|||……虽然我也有计算器的代码,不过我还是给你指正下你的问题出在哪里吧。很无语……
public void actionPerformed(ActionEvent e){
Button0.addActionListener(this);
if(e.getActionCommand().equals("Button1"))
Text1.setText(e.getActionCommand());
}
你应该把这里面的Button0.addActionListener(this);添加到Calculator类函数中.因为你是在Calculator类中触发了按钮事件,然后在actionPerformed(ActionEvent e)函数中处理它。你把它放到actionPerformed(ActionEvent e)函数中,又怎么能触发事件呢……
你修改看看吧,这样应该就可以用了

将Button0.addActionListener(this);移到Calculator()函数,并将按键处理代码修改如下即可正常运行

public void actionPerformed(ActionEvent e){

if(e.getSource()== Button0)
Text1.setText(Button0.getLabel());
}
}

Button0.addActionListener(this);
if(e.getActionCommand().equals("Button1"))
Text1.setText(e.getActionCommand());
}

注意你equals的对象不是Button0!

如何用java编写一个简单的计算器,只要能进行最基本的加减乘除运算就可以...
答:简单的啊,我有个自己编的完美的,不过给你改成简单的吧。有注释。import java.awt.*;import javax.swing.*;import javax.swing.border.*;import java.awt.event.*;import java.text.*;public class Calculator extends JFrame implements ActionListener { int m=0,i,n=0; float sum=0,s1,s2,equ; Str...

用JAVA编写一个计算器
答:2012-07-02 用JAVA编写一个计算器 2005-12-25 如何用java编程做一个计算器? 2010-09-18 能够用Java编写一个计算器是什么水平了 2013-01-06 、使用JAVA语言编写一个简易的计算器 2015-01-31 用JAVA编写一个简单的计算器,要求如下 2015-07-19 使用java实现一个控制台计算器程序。 2014-04-28 一、...

用JAVA写一个计算器 要求有图形界面。简单的加减乘除,不要小数点运算...
答:private String operator = "="; //当前运算的运算符 private boolean firstDigit = true; // 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字 private double resultNum = 0.0; // 计算的中间结果 private boolean operateValidFlag = true; //判断操作是否合法 private J...

如何用java语言编写一个计算圆的面积的程式?
答:如何用java语言编写一个计算圆的面积的程式? 假设这个圆的类名叫做Circle,因为根据圆的半径就可以求出圆的周长和面积,所以可以在这个类中定义一个半径属性mRadius,然后定义两个方法getLength和getArea分别实现计算圆周长和面积的功能。java语言原始码如下:public class Circle{ 获取圆的面积 pub...

用JAVA编写一个程序,计算从1加到50求和,输出结果
答:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 [1] 。Java具有简单性、面向对象、...

用Java编写一个程序,其中包含一个计算面积的方法:计算圆的面积,参数...
答:public static void main(String[] args) { double R = 0, S, C, V;try { System.out.print("请输入圆的半径:");R = Double.parseDouble((new BufferedReader(new InputStreamReader(System.in))).readLine());} catch (Exception e) { System.out.println("你输入的不是一个可计算的...

java:编写一个计算器小程序,要求可以做加减乘除运算
答:private String operator = "="; //当前运算的运算符 private boolean firstDigit = true; // 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字 private double resultNum = 0.0; // 计算的中间结果 private boolean operateValidFlag = true; //判断操作是否合法 public ...

如何使用Java对象语言编写一个加减乘除计算器要有代码
答:下面文件名要为:JiSuanQi.java import java.awt.*;import java.awt.event.*;public class JiSuanQi { String s="",s1=null,s2=null;Frame f=new Frame("计算器");TextField tf=new TextField(30);Panel p1=new Panel();Panel p2=new Panel();Panel p3=new Panel();Button bt1=new ...

Java程序编写一个计算器类,要求实现加、减、乘、除运算,注意在进行除 ...
答:JButton bCancel; //清除按钮private JButton[] b=new JButton[16]; //构造按钮数组private char LastOp; //操作符号private boolean Countable; //用于判断是否可计算private String KeyLabel[]={"7","8","9","/","4","5","6","*","1","2","3","-","0","."...

用Java 写一个两个整数相加的程序
答:代码如下:public class Test { public static int add(int a,int b){ return a+b;} public static void main(String args[]){ Scanner scanner = new Scanner(System.in);System.out.println("请输入第一个数");int a = scanner.nextInt();System.out.println("请输入第二个数");int b...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网