189 8069 5689

java计算器输入框代码,java编写计算器界面

java计算器代码

这段代码对你有帮助

成都服务器托管,成都创新互联公司提供包括服务器租用、托管服务器、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、域名与空间等业务的一体化完整服务。电话咨询:18980820575

import javax.swing.*;

import javax.swing.border.Border;

import java.awt.*;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.math.BigDecimal;

import java.math.RoundingMode;

import java.util.HashMap;

/**

* 我的计算器。MyCalculator 继承于 JFrame,是计算器的界面

*/

public class MyCalculator extends JFrame {

private Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5);

private JTextField textbox = new JTextField("0");

private CalculatorCore core = new CalculatorCore();

private ActionListener listener = new ActionListener() {

public void actionPerformed(ActionEvent e) {

JButton b = (JButton) e.getSource();

String label = b.getText();

String result = core.process(label);

textbox.setText(result);

}

};

public MyCalculator(String title) throws HeadlessException {

super(title); // 调用父类构造方法

setupFrame(); // 调整窗体属性

setupControls(); // 创建控件

}

private void setupControls() {

setupDisplayPanel(); // 创建文本面板

setupButtonsPanel(); // 创建按钮面板

}

// 创建按钮面板并添加按钮

private void setupButtonsPanel() {

JPanel panel = new JPanel();

panel.setBorder(border);

panel.setLayout(new GridLayout(4, 5, 3, 3));

createButtons(panel, new String[]{

"7", "8", "9", "+", "C",

"4", "5", "6", "-", "CE",

"1", "2", "3", "*", "", // 空字符串表示这个位置没有按钮

"0", ".", "=", "/", ""

});

this.add(panel, BorderLayout.CENTER);

}

/**

* 在指定的面板上创建按钮

*

* @param panel 要创建按钮的面板

* @param labels 按钮文字

*/

private void createButtons(JPanel panel, String[] labels) {

for (String label : labels) {

// 如果 label 为空,则表示创建一个空面板。否则创建一个按钮。

if (label.equals("")) {

panel.add(new JPanel());

} else {

JButton b = new JButton(label);

b.addActionListener(listener); // 为按钮添加侦听器

panel.add(b);

}

}

}

// 设置显示面板,用一个文本框来作为计算器的显示部分。

private void setupDisplayPanel() {

JPanel panel = new JPanel();

panel.setLayout(new BorderLayout());

panel.setBorder(border);

setupTextbox();

panel.add(textbox, BorderLayout.CENTER);

this.add(panel, BorderLayout.NORTH);

}

// 调整文本框

private void setupTextbox() {

textbox.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐

textbox.setEditable(false); // 文本框只读

textbox.setBackground(Color.white); // 文本框背景色为白色

}

// 调整窗体

private void setupFrame() {

this.setDefaultCloseOperation(EXIT_ON_CLOSE); // 当窗体关闭时程序结束

this.setLocation(100, 50); // 设置窗体显示在桌面上的位置

this.setSize(300, 200); // 设置窗体大小

this.setResizable(false); // 窗体大小固定

}

// 程序入口

public static void main(String[] args) throws Exception {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

MyCalculator frame = new MyCalculator("我的计算器");

frame.setVisible(true); // 在桌面上显示窗体

}

}

/**

* 计算器核心逻辑。这个逻辑只能处理 1~2 个数的运算。

*/

class CalculatorCore {

private String displayText = "0"; // 要显示的文本

boolean reset = true;

private BigDecimal number1, number2;

private String operator;

private HashMapString, Operator operators = new HashMapString, Operator();

private HashMapString, Processor processors = new HashMapString, Processor();

CalculatorCore() {

setupOperators();

setupProcessors();

}

// 为每种命令添加处理方式

private void setupProcessors() {

processors.put("[0-9]", new Processor() {

public void calculate(String command) {

numberClicked(command);

}

});

processors.put("\\.", new Processor() {

public void calculate(String command) {

dotClicked();

}

});

processors.put("=", new Processor() {

public void calculate(String command) {

equalsClicked();

}

});

processors.put("[+\\-*/]", new Processor() {

public void calculate(String command) {

operatorClicked(command);

}

});

processors.put("C", new Processor() {

public void calculate(String command) {

clearClicked();

}

});

processors.put("CE", new Processor() {

public void calculate(String command) {

clearErrorClicked();

}

});

}

// 为每种 operator 添加处理方式

private void setupOperators() {

operators.put("+", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.add(number2);

}

});

operators.put("-", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.subtract(number2);

}

});

operators.put("*", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.multiply(number2);

}

});

operators.put("/", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.divide(number2, 30, RoundingMode.HALF_UP);

}

});

}

// 根据命令处理。这里的命令实际上就是按钮文本。

public String process(String command) {

for (String pattern : processors.keySet()) {

if (command.matches(pattern)) {

processors.get(pattern).calculate(command);

break;

}

}

return displayText;

}

// 当按下 CE 时

private void clearErrorClicked() {

if (operator == null) {

number1 = null;

} else {

number2 = null;

}

displayText = "0";

reset = true;

}

// 当按下 C 时,将计算器置为初始状态。

private void clearClicked() {

number1 = null;

number2 = null;

operator = null;

displayText = "0";

reset = true;

}

// 当按下 = 时

private void equalsClicked() {

calculateResult();

number1 = null;

number2 = null;

operator = null;

reset = true;

}

// 计算结果

private void calculateResult() {

number2 = new BigDecimal(displayText);

Operator oper = operators.get(operator);

if (oper != null) {

BigDecimal result = oper.process(number1, number2);

displayText = result.toString();

}

}

// 当按下 +-*/ 时(这里也可以扩展成其他中间操作符)

private void operatorClicked(String command) {

if (operator != null) {

calculateResult();

}

number1 = new BigDecimal(displayText);

operator = command;

reset = true;

}

// 当按下 . 时

private void dotClicked() {

if (displayText.indexOf(".") == -1) {

displayText += ".";

} else if (reset) {

displayText = "0.";

}

reset = false;

}

// 当按下 0-9 时

private void numberClicked(String command) {

if (reset) {

displayText = command;

} else {

displayText += command;

}

reset = false;

}

// 运算符处理接口

interface Operator {

BigDecimal process(BigDecimal number1, BigDecimal number2);

}

// 按钮处理接口

interface Processor {

void calculate(String command);

}

}

求JAVA做的计算器完整代码,Applet实现。

下面两个可以么,是我做实验答辩时用到的!

import java.awt.*;//AWT核心包

import java.awt.event.*;//提供事件类和监听器

public class Counter extends Frame implements ActionListener

{

TextField t=new TextField("");//文本框

Panel p1=new Panel();//new一个panel,用于存放数字键和符号键。

Panel p2=new Panel();//new一个panel,用于存放开方、平方、和清除键。

Button[] b=new Button[10];//实例化Button对象

Button bAdd=new Button("加");

Button bSub=new Button("减");

Button bMul=new Button("乘以");

Button bPoint=new Button(".");

Button bDiv=new Button("除以");

Button bEqual=new Button("等於");

Button bSqrt=new Button("开方");

Button bPow=new Button("平方");

Button bNull=new Button("清除");

String str1="";     //str1和str2存放两个输入的数

String str2="";

String operator=null;   //存放加减乘除以及开平方的符号

boolean first=true;    //检验输入的是否为第一个数

int countOper=0;    //累计输入符号的个数,连加连减等操作中会用到

double result=0.0;    //暂存结果

double num1=0.0,num2=0.0;  //两个输入的数做运算时转化为double存放

boolean error=false;   //检验除数是否为0

//构造方法

public Counter()

{

Frame s=new Frame("计算器");//创建Frame

for(int i=0;i10;i++)//利用for循环将数字键添加进p1中

{

b[i]=new Button(String.valueOf(i));

p1.add(b[i]);

b[i].setActionCommand("number");

b[i].setForeground(new Color(150,20,20));

b[i].addActionListener(this);//调用addActionListener()方法注册事件监听器

}

p1.add(bPoint);

bPoint.setActionCommand("number");

p1.add(bAdd); //数字键,符号键放置在panel的p1中

p1.add(bSub);

p1.add(bMul);

p1.add(bDiv);

p1.add(bEqual);

p2.add(bSqrt);//开方键,平方键,清除键放置在panel的p2中

p2.add(bPow);

p2.add(bNull);

bAdd.setActionCommand("oper");

bSub.setActionCommand("oper");

bMul.setActionCommand("oper");

bDiv.setActionCommand("oper");

bAdd.setForeground(Color.red);//为组键设计颜色

bSub.setForeground(Color.red);

bMul.setForeground(Color.red);

bDiv.setForeground(Color.red);

bPoint.setForeground(Color.black);

bEqual.setForeground(Color.red);

bSqrt.setForeground(Color.blue);

bPow.setForeground(Color.blue);

bNull.setForeground(Color.blue);

bAdd.addActionListener(this);//调用addActionListener()方法注册事件监听器

bSub.addActionListener(this);

bMul.addActionListener(this);

bDiv.addActionListener(this);

bPoint.addActionListener(this);

bEqual.addActionListener(this);

bSqrt.addActionListener(this);

bPow.addActionListener(this);

bNull.addActionListener(this);

p1.setLayout(new GridLayout(4,4,5,5));//网格布局管理器,把容器根据行数和列数分成同样大小的单元,

//每个单元可容纳一个组件,并且此组件会填满网格单元,不能控

//制其占据网格的大小。4、4为网格的行、列数。5、5为组建之间的

//间距

p2.setLayout(new FlowLayout());//用FlowLayout布局管理器将组建默认剧中排放,默认间隙为5个像素

add(t,"North");      //frame的north放置输入框,panel放置在center和south

add(p1,"Center");//将p1添加到Center中

add(p2,"South");//将p2添加到South中

setLocation(400,200);//设计按钮尺寸

setSize(200,200);//设计窗口尺寸

setBackground(new Color(20,200,10));//设置Frame的背景,默认为白色

setVisible(true);//设置Frame设置为可见

addWindowListener(new WindowAdapter(){   //关闭窗口功能

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

}

//实现接口ActionListener

public void actionPerformed(ActionEvent e)

{

Button temp=(Button)e.getSource();

if(e.getActionCommand().equals("number"))

{

if(first)

{

str1=str1+temp.getLabel();

t.setText(str1);//将输入的str1显示在文本框中

}

else

{

str2=str2+temp.getLabel();

t.setText(str2);//将输入的str2显示在文本框中

}

}

else if(e.getActionCommand().equals("oper"))

{

if(str1=="")    //如果还没有输入数就点击运算符执行if

{

countOper=0;//若此,则将计数清零

first=true;

}

else

{

countOper++;//计算输入符号的个数

if(countOper1)//若输入的符号个数多余一个,则可以进行计算

{

getResult();

}

operator=temp.getLabel();//存放加减乘除以及开方、平方的符号

first=false;

}

}

else if(e.getActionCommand().equals("开方"))

{

double d=Math.sqrt(Double.parseDouble(str1));

str1=String.valueOf(d);//将计算出来的结果再次传给str1,为连计算准备

t.setText(String.valueOf(d));//将计算出来的结果传至文本框中

first=false;//置为false,即已输入第一个数

}

else if(e.getActionCommand().equals("平方"))

{

double f=Math.pow(Double.parseDouble(str1),2);

str1=String.valueOf(f);

t.setText(String.valueOf(f));

first=false;

}

else if(e.getActionCommand().equals("清除"))

{

str1="";//清空

str2="";

t.setText("");//将文本框清空

countOper=0;//将按键计数器清零

first=true;

error=false;

}

else if(e.getActionCommand().equals("等於"))

{

if((str1=="")||(str2==""))   //两个数没有输全就点击等号,执行if

{

countOper=0;//将按键计数器清零

first=true;

}

else

{

getResult();

countOper=0;

}

}

}

//运算结果的方法

public void getResult()

{

num1=Double.parseDouble(str1);

num2=Double.parseDouble(str2);

if(operator.equals("加"))

{

result=num1+num2;

}

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

{

result=num1-num2;

}

else if(operator.equals("乘以"))

{

result=num1*num2;

}

else if(operator.equals("除以"))

{

if(num2==0.0)    //除数为0的处理方法

{

error=true;

}

else

{

result=num1/num2;

}

}

if(error)

{

t.setText("error");

}

else

{

t.setText(String.valueOf(result));

str1=String.valueOf(result);  //运算后把结果放入str1中,str2清空,为连加连减等操作做准备

str2="";

}

}

//主方法

public static void main(String[] args)

{

new Counter();//创建一个对象"计算器"

}

}

import   java.awt.*;

import   java.awt.event.*;

import   javax.swing.*;

class   CalculatorPanel   extends   JPanel

implements   ActionListener

{     public   CalculatorPanel()

{     setLayout(new   BorderLayout());

display   =   new   JTextField("0");

display.setEditable(false);

add(display,   "North");

JPanel   p   =   new   JPanel();

p.setLayout(new   GridLayout(4,   4));

String   buttons   =   "789/456*123-0.=+";

for   (int   i   =   0;   i      buttons.length();   i++)

addButton(p,   buttons.substring(i,   i   +   1));

add(p,   "Center");

}

private   void   addButton(Container   c,   String   s)

{     JButton   b   =   new   JButton(s);

c.add(b);

b.addActionListener(this);

}

public   void   actionPerformed(ActionEvent   evt)

{     String   s   =   evt.getActionCommand();

if   ('0'   =   s.charAt(0)      s.charAt(0)   =   '9'

||   s.equals("."))

{     if   (start)   display.setText(s);

else   display.setText(display.getText()   +   s);

start   =   false;

}

else

{     if   (start)

{     if   (s.equals("-"))

{   display.setText(s);   start   =   false;   }

else   op   =   s;

}

else

{     calculate(Double.parseDouble(display.getText()));

op   =   s;

start   =   true;

}

}

}

public   void   calculate(double   n)

{     if   (op.equals("+"))   arg   +=   n;

else   if   (op.equals("-"))   arg   -=   n;

else   if   (op.equals("*"))   arg   *=   n;

else   if   (op.equals("/"))   arg   /=   n;

else   if   (op.equals("="))   arg   =   n;

display.setText(""   +   arg);

}

private   JTextField   display;

private   double   arg   =   0;

private   String   op   =   "=";

private   boolean   start   =   true;

}

public   class   CalculatorApplet   extends   JApplet

{     public   void   init()

{     Container   contentPane   =   getContentPane();

contentPane.add(new   CalculatorPanel());

}

}

使用java语言编写一个计算器, 小数点的按钮如何用代码实现, 比如 1.1234 的输入?

if(temp==".")//判断只能输入一个小数,这个放在actionPerformed里的

{

for(int i=0;inum.getText().length();i++)

{

if(num.getText().charAt(i)=='.')

break;

if(i==num.getText().length()-1)

num.setText(num.getText()+temp);

}

}

ps:

String temp=e.getActionCommand();

num是计算器的显示框JTextFiled类型

求用JAVA实现计算器的代码(可实用的,没语法错误的)

import java.awt.BorderLayout; import java.awt.Color; 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.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.TitledBorder; //导包 public class Jisuanqi extends JFrame implements ActionListener { //继承JFrame 实现事件监听 private JTextField reasult; private JButton btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0, btnAC, btnAdd, btnSub, btnReasult, btnD, btnAbout, btnCancel; private boolean add, sub, end, s, c; private String str; private double num1, num2; public Jisuanqi() { //构造属性 JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); TitledBorder tb = new TitledBorder("输出"); tb.setTitleColor(Color.BLUE); //标题边框底端线 设置颜色 btnAbout = new JButton(" 关于 "); btnCancel = new JButton("Cancel"); //两个按钮 btnCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ee) { System.exit(0); } }); //给Cancel添加事件监听 当鼠标点击时 程序结束 btnAbout.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ee) { JOptionPane.showMessageDialog(null, "黄盖!!", "消息", JOptionPane.INFORMATION_MESSAGE); } //给“关于”添加事件监听 当鼠标点击时 弹出对话框 显示黄盖 }); p3.add(btnAbout); p3.add(btnCancel); // JPanel p4=new JPanel(); // JPanel p5=new JPanel(); // reasult.setBorder(tb); reasult = new JTextField("0", 20); reasult.setEditable(false); //设置不能修改 reasult.setHorizontalAlignment(JTextField.RIGHT); // 设置文本的水平对齐方式。 reasult.setForeground(Color.BLUE); //颜色 p1.setBorder(tb); p1.add(reasult); btn0 = new JButton("0"); btn0.addActionListener(this); btn1 = new JButton("1"); btn1.addActionListener(this); btn2 = new JButton("2"); btn2.addActionListener(this); btn3 = new JButton("3"); btn3.addActionListener(this); btn4 = new JButton("4"); btn4.addActionListener(this); btn5 = new JButton("5"); btn5.addActionListener(this); btn6 = new JButton("6"); btn6.addActionListener(this); btn7 = new JButton("7"); btn7.addActionListener(this); btn8 = new JButton("8"); btn8.addActionListener(this); btn9 = new JButton("9"); btn9.addActionListener(this); btnD = new JButton("."); btnD.addActionListener(this); btnD.setForeground(Color.RED); btnAC = new JButton("AC"); btnAC.addActionListener(this); btnAC.setBackground(Color.PINK); btnAdd = new JButton("+"); btnAdd.addActionListener(this); btnAdd.setForeground(Color.BLUE); btnSub = new JButton("—"); btnSub.addActionListener(this); btnSub.setForeground(Color.BLUE); btnReasult = new JButton("="); btnReasult.addActionListener(this); btnReasult.setForeground(Color.RED); //事件监听 + 颜色 p2.add(btn1); p2.add(btn2); p2.add(btn3); p2.add(btn4); p2.add(btn5); p2.add(btn6); p2.add(btn7); p2.add(btn8); p2.add(btn9); p2.add(btn0); p2.add(btnD); p2.add(btnAC); p2.add(btnAdd); p2.add(btnSub); p2.add(btnReasult); //面板上添加按钮 p2.setLayout(new GridLayout(5, 3)); //面板上设置对齐方式 add(p1, BorderLayout.NORTH); add(p2, BorderLayout.CENTER); add(p3, BorderLayout.SOUTH); //将p1 p2 p3 面板对象添加到JFrame } public void num(int i) { String s = null; s = String.valueOf(i); if (end) { // 如果数字输入结束,则将文本框置零,重新输入 reasult.setText("0"); end = false; } if ((reasult.getText()).equals("0")) { // 如果文本框的内容为零,则覆盖文本框的内容 reasult.setText(s); } else { // 如果文本框的内容不为零,则在内容后面添加数字 str = reasult.getText() + s; reasult.setText(str); } }/* * * String s=null; * * s=String.valueOf(i); * * str=reasult.getText()+s; * * reasult.setText(str); * * } */ public void actionPerformed(ActionEvent e) { if (e.getSource() == btn1) num(1); else if (e.getSource() == btn2) num(2); else if (e.getSource() == btn3) num(3); else if (e.getSource() == btn4) num(4); else if (e.getSource() == btn5) num(5); else if (e.getSource() == btn6) num(6); else if (e.getSource() == btn7) num(7); else if (e.getSource() == btn8) num(8); else if (e.getSource() == btn9) num(9); else if (e.getSource() == btn0) num(0); else if (e.getSource() == btnAdd) { sign(1); btnD.setEnabled(true); } else if (e.getSource() == btnSub) { sign(2); btnD.setEnabled(true); } else if (e.getSource() == btnAC) { btnD.setEnabled(true); reasult.setText("0"); } else if (e.getSource() == btnD) { str = reasult.getText(); str += "."; reasult.setText(str); btnD.setEnabled(false); } else if (e.getSource() == btnReasult) { btnD.setEnabled(true); num2 = Double.parseDouble(reasult.getText()); if (add) { num1 = num1 + num2; } else if (sub) { num1 = num1 - num2; } reasult.setText(String.valueOf(num1)); end = true; } } public void sign(int s) { if (s == 1) { add = true; sub = false; } else if (s == 2) { add = false; sub = true; } num1 = Double.parseDouble(reasult.getText()); end = true; } //设计计算的过程 public static void main(String[] args) { Jisuanqi j = new Jisuanqi(); j.setTitle("+/-简易计算器"); j.setLocation(500, 280); j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //默认关闭可以关闭程序 j.setResizable(false); j.pack(); j.setVisible(true); } } 这个计算机,绝对让你满意

java 计算器代码

import javax.swing.*;

import javax.swing.border.Border;

import java.awt.*;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.math.BigDecimal;

import java.math.RoundingMode;

import java.util.HashMap;

/**

* 我的计算器。Cheshi 继承于 JFrame,是计算器的界面

c*/

public class Cheshi extends JFrame {

private Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5);

private JTextField textbox = new JTextField("0");

private CalculatorCore core = new CalculatorCore();

private ActionListener listener = new ActionListener() {

public void actionPerformed(ActionEvent e) {

JButton b = (JButton) e.getSource();

String label = b.getText();

String result = core.process(label);

textbox.setText(result);

}

};

public Cheshi(String title) throws HeadlessException {

super(title); // 调用父类构造方法

setupFrame(); // 调整窗体属性

setupControls(); // 创建控件

}

private void setupControls() {

setupDisplayPanel(); // 创建文本面板

setupButtonsPanel(); // 创建按钮面板

}

// 创建按钮面板并添加按钮

private void setupButtonsPanel() {

JPanel panel = new JPanel();

panel.setBorder(border);

panel.setLayout(new GridLayout(4, 5, 3, 3));

createButtons(panel, new String[]{

"7", "8", "9", "+", "C",

"4", "5", "6", "-", "CE",

"1", "2", "3", "*", "", // 空字符串表示这个位置没有按钮

"0", ".", "=", "/", ""

});

this.add(panel, BorderLayout.CENTER);

}

/**

* 在指定的面板上创建按钮

*

* @param panel 要创建按钮的面板

* @param labels 按钮文字

*/

private void createButtons(JPanel panel, String[] labels) {

for (String label : labels) {

// 如果 label 为空,则表示创建一个空面板。否则创建一个按钮。

if (label.equals("")) {

panel.add(new JPanel());

} else {

JButton b = new JButton(label);

b.addActionListener(listener); // 为按钮添加侦听器

panel.add(b);

}

}

}

// 设置显示面板,用一个文本框来作为计算器的显示部分。

private void setupDisplayPanel() {

JPanel panel = new JPanel();

panel.setLayout(new BorderLayout());

panel.setBorder(border);

setupTextbox();

panel.add(textbox, BorderLayout.CENTER);

this.add(panel, BorderLayout.NORTH);

}

// 调整文本框

private void setupTextbox() {

textbox.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐

textbox.setEditable(false); // 文本框只读

textbox.setBackground(Color.white); // 文本框背景色为白色

}

// 调整窗体

private void setupFrame() {

this.setDefaultCloseOperation(EXIT_ON_CLOSE); // 当窗体关闭时程序结束

this.setLocation(100, 50); // 设置窗体显示在桌面上的位置

this.setSize(300, 200); // 设置窗体大小

this.setResizable(false); // 窗体大小固定

}

// 程序入口

public static void main(String[] args) throws Exception {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Cheshi frame = new Cheshi("我的计算器");

frame.setVisible(true); // 在桌面上显示窗体

}

}

/**

* 计算器核心逻辑。这个逻辑只能处理 1~2 个数的运算。

*/

class CalculatorCore {

private String displayText = "0"; // 要显示的文本

boolean reset = true;

private BigDecimal number1, number2;

private String operator;

private HashMapString, Operator operators = new HashMapString, Operator();

private HashMapString, Processor processors = new HashMapString, Processor();

CalculatorCore() {

setupOperators();

setupProcessors();

}

// 为每种命令添加处理方式

private void setupProcessors() {

processors.put("[0-9]", new Processor() {

public void calculate(String command) {

numberClicked(command);

}

});

processors.put("\\.", new Processor() {

public void calculate(String command) {

dotClicked();

}

});

processors.put("=", new Processor() {

public void calculate(String command) {

equalsClicked();

}

});

processors.put("[+\\-*/]", new Processor() {

public void calculate(String command) {

operatorClicked(command);

}

});

processors.put("C", new Processor() {

public void calculate(String command) {

clearClicked();

}

});

processors.put("CE", new Processor() {

public void calculate(String command) {

clearErrorClicked();

}

});

}

// 为每种 operator 添加处理方式

private void setupOperators() {

operators.put("+", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.add(number2);

}

});

operators.put("-", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.subtract(number2);

}

});

operators.put("*", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.multiply(number2);

}

});

operators.put("/", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.divide(number2, 30, RoundingMode.HALF_UP);

}

});

}

// 根据命令处理。这里的命令实际上就是按钮文本。

public String process(String command) {

for (String pattern : processors.keySet()) {

if (command.matches(pattern)) {

processors.get(pattern).calculate(command);

break;

}

}

return displayText;

}

// 当按下 CE 时

private void clearErrorClicked() {

if (operator == null) {

number1 = null;

} else {

number2 = null;

}

displayText = "0";

reset = true;

}

// 当按下 C 时,将计算器置为初始状态。

private void clearClicked() {

number1 = null;

number2 = null;

operator = null;

displayText = "0";

reset = true;

}

// 当按下 = 时

private void equalsClicked() {

calculateResult();

number1 = null;

number2 = null;

operator = null;

reset = true;

}

// 计算结果

private void calculateResult() {

number2 = new BigDecimal(displayText);

Operator oper = operators.get(operator);

if (oper != null) {

BigDecimal result = oper.process(number1, number2);

displayText = result.toString();

}

}

// 当按下 +-*/ 时(这里也可以扩展成其他中间操作符)

private void operatorClicked(String command) {

if (operator != null) {

calculateResult();

}

number1 = new BigDecimal(displayText);

operator = command;

reset = true;

}

// 当按下 . 时

private void dotClicked() {

if (displayText.indexOf(".") == -1) {

displayText += ".";

} else if (reset) {

displayText = "0.";

}

reset = false;

}

// 当按下 0-9 时

private void numberClicked(String command) {

if (reset) {

displayText = command;

} else {

displayText += command;

}

reset = false;

}

// 运算符处理接口

interface Operator {

BigDecimal process(BigDecimal number1, BigDecimal number2);

}

// 按钮处理接口

interface Processor {

void calculate(String command);

}

}

求一java计算器编辑 源代码

那样的可能不是很好做,我给你这个,你看一下吧。我用这个经过了Java的实验答辩。

import java.awt.*;//AWT核心包

import java.awt.event.*;//提供事件类和监听器

public class Counter extends Frame implements ActionListener

{

TextField t=new TextField("");

Panel p1=new Panel();//new一个panel,用于存放数字键和符号键。

Panel p2=new Panel();//new一个panel,用于存放开方、平方、和清除键。

Button[] b=new Button[10];//创建对象Button

Button bAdd=new Button("加");//实例化Button对象

Button bSub=new Button("减");

Button bMul=new Button("乘以");

Button bPoint=new Button(".");

Button bDiv=new Button("除以");

Button bEqual=new Button("等於");

Button bSqrt=new Button("开方");

Button bPow=new Button("平方");

Button bNull=new Button("清除");

String str1="";     //str1和str2存放两个输入的数

String str2="";

String operator=null;   //存放加减乘除以及开平方的符号

boolean first=true;    //检验输入的是否为第一个数

int countOper=0;    //累计输入符号的个数,连加连减等操作中会用到

double result=0.0;    //暂存结果

double num1=0.0,num2=0.0;  //两个输入的数做运算时转化为double存放

boolean error=false;   //检验除数是否为0

//构造方法

public Counter()

{

super("计算器");

t.setEditable(false);

for(int i=0;i10;i++)//利用for循环将数字键添加进p1中

{

b[i]=new Button(String.valueOf(i));

p1.add(b[i]);

b[i].setActionCommand("number");

b[i].addActionListener(this);//调用addActionListener()方法注册事件监听器

}

p1.add(bPoint);

bPoint.setActionCommand("number");

p1.add(bAdd); //数字键,符号键放置在panel的p1中

p1.add(bSub);

p1.add(bMul);

p1.add(bDiv);

p1.add(bEqual);

p2.add(bSqrt);//开方键,平方键,清除键放置在panel的p2中

p2.add(bPow);

p2.add(bNull);

bAdd.setActionCommand("oper");

bSub.setActionCommand("oper");

bMul.setActionCommand("oper");

bDiv.setActionCommand("oper");

bAdd.addActionListener(this);//调用addActionListener()方法注册事件监听器

bSub.addActionListener(this);

bMul.addActionListener(this);

bDiv.addActionListener(this);

bPoint.addActionListener(this);

bEqual.addActionListener(this);

bSqrt.addActionListener(this);

bNull.addActionListener(this);

p1.setLayout(new GridLayout(4,4,5,5));//网格布局管理器,把容器根据行数和列数分成同样大小的单元,

//每个单元可容纳一个组件,并且此组件会填满网格单元,不能控

//制其占据网格的大小。4、4为网格的行、列数。5、5为组建之间的

//间距

p2.setLayout(new FlowLayout());//用FlowLayout布局管理器将组建默认剧中排放,默认间隙为5个像素

add(t,"North");      //frame的north放置输入框,panel放置在center和south

add(p1,"Center");//将p1添加到Center中

add(p2,"South");//将p2添加到South中

setLocation(400,200);//设计按钮尺寸

setSize(200,200);//设计窗口尺寸

setBackground(new Color(20,200,10));//设置Frame的背景,默认为白色

setVisible(true);//设置Frame设置为可见

addWindowListener(new WindowAdapter(){   //关闭窗口功能

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

}

//实现接口ActionListener

public void actionPerformed(ActionEvent e)

{

Button temp=(Button)e.getSource();

if(e.getActionCommand().equals("number"))

{

if(first)

{

str1=str1+temp.getLabel();

t.setText(str1);//将输入的str1显示在文本框中

}

else

{

str2=str2+temp.getLabel();

t.setText(str2);//将输入的str2显示在文本框中

}

}

else if(e.getActionCommand().equals("oper"))

{

if(str1=="")//如果还没有输入数就点击运算符执行if

{

countOper=0;//若此,则将计数清零

first=true;

}

else

{

countOper++;//计算输入符号的个数

if(countOper1)//若输入的符号个数多余一个,则可以进行计算

{

getResult();

}

operator=temp.getLabel();//存放加减乘除以及开方、平方的符号

first=false;

}

}

else if(e.getActionCommand().equals("开方"))

{

double d=Math.sqrt(Double.parseDouble(str1));

str1=String.valueOf(d);//将计算出来的结果再次传给str1,为连计算准备

t.setText(String.valueOf(d));//将计算出来的结果传至文本框中

first=false;//置为false,即已输入第一个数

}

else if(e.getActionCommand().equals("平方"))

{

double f=Math.pow(Double.parseDouble(str1),2);

str1=String.valueOf(f);

t.setText(String.valueOf(f));

first=false;

}

else if(e.getActionCommand().equals("清除"))

{

str1="";//清空

str2="";

t.setText("");//将文本框清空

countOper=0;//将按键计数器清零

first=true;

error=false;

}

else if(e.getActionCommand().equals("等於"))

{

if((str1=="")||(str2==""))   //两个数没有输全就点击等号,执行if

{

countOper=0;//将按键计数器清零

first=true;

}

else

{

getResult();

countOper=0;

}

}

}

//运算结果的方法

public void getResult()

{

num1=Double.parseDouble(str1);

num2=Double.parseDouble(str2);

if(operator.equals("加"))

{

result=num1+num2;

}

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

{

result=num1-num2;

}

else if(operator.equals("乘以"))

{

result=num1*num2;

}

else if(operator.equals("除以"))

{

if(num2==0.0)    //除数为0的处理方法

{

error=true;

}

else

{

result=num1/num2;

}

}

if(error)

{

t.setText("error");

}

else

{

t.setText(String.valueOf(result));

str1=String.valueOf(result);  //运算后把结果放入str1中,str2清空,为连加连减等操作做准备

str2="";

}

}

//主方法

public static void main(String[] args)

{

new Counter();//创建一个对象"计算器"

}

}


本文名称:java计算器输入框代码,java编写计算器界面
标题来源:http://jkwzsj.com/article/hechij.html

其他资讯