java 编写java window服务程序计算器程序。(要求:能进行浮点数运算,功能和java window服务程序s计算机中的功能相同。)

2824人阅读
java awt(1)
程序能实现基本的算术运算,并能够对运算结果的精度进行有效控制,并且实现了存储器相关功能
功能如下:
MC:清除存储数据
MR:读取存储数据显示在屏幕上
MS:将显示的数据覆盖存储到存储器中
M+:用存储的数据加上屏幕上显示的数并更新存储器里的值
M-: 用存储的数据减去屏幕上显示的数并更新存储器里的值
←: 删除输入数的尾数
清除计算器数据,下一次输入数据开始新的运算
清除当前输入的数
正负数转换
+,-,*,/ 加减乘除,将结果
1/x:取倒数
程序流程图:
代码实现:
class operateNum {//操作数类
//操作数的实际值
public int dotW//操作数如果是小数,记录小数点后的位数
public String invertedS//1/x字符串
public String sqrtedS//sqrt(x)字符串
public boolean isSqrted,isI//做标记是否√,1/x过,用于后续判断
//clear为真表示是否重置操作数
public boolean isF//isFloat为真,表示操作数是小数
public operateNum()
sqrtedString=
invertedString=
isInverted=
public void reset()//重置操作数
sqrtedString=
invertedString=
isInverted=
class storageField {//存储区
public double storageN//存储区存储的数据
public boolean storageM//是否启动存储区
public storageField()
storageNum=0;
storageMode=
import java.awt.*;
import java.awt.event.KeyA
import java.awt.event.KeyE
import java.awt.event.MouseA
import java.awt.event.MouseE
import java.math.BigD
import javax.swing.*;
import javax.swing.border.B
import javax.swing.border.LineB
public class calc extends JFrame{
private JTextField display1,display2,display3;
private JButton num[],operate[];
private String name[]={&MC&,&MR&,&MS&,&M+&,&M-&,&←&,&CE&,&C&,&±&,&√&,&7&,&8&,&9&,&/&,&%&,&4&,&5&,&6&,&*&,&1/x&,&1&,&2&,&3&,&-&,&=&,&0&,&.&,&+&};
private operateNum op1=new operateNum(),op2=new operateNum();//操作数1,操作数2
private storageField storage=new storageField();//存储区
private String action=&op1&;//表示要操作的对象
&op1&操作第一个操作数,&op2&操作第二个操作数
private String sign=&&;//运算符,默认为空
private String screen1,screen2;
private boolean Disable=
public calc()
super(&计算器&);
this.setLayout(null);
this.setSize(228, 324);
this.setResizable(false);
JPanel jp=new JPanel(null);
jp.setBounds(10,15,getWidth()-24,getHeight());
jp.setBackground(new Color(217,228,241));
this.getContentPane().setBackground(new Color(217,228,241));
/**显示屏**/
display1=new JTextField(&&);
display2=new JTextField(&0&);
display3=new JTextField(&&);
display1.setEnabled(false);
display2.setEnabled(false);
display3.setEnabled(false);
display1.setBounds(0, 0, 204, 26);
display2.setBounds(20, 20, 184, 34);
display3.setBounds(0, 20, 20, 34);
display1.setHorizontalAlignment(JLabel.RIGHT);
display2.setHorizontalAlignment(JLabel.RIGHT);
display3.setHorizontalAlignment(JLabel.CENTER);
display1.setFont(new Font(&宋体&,Font.PLAIN,12));
display2.setFont(new Font(&宋体&,Font.BOLD,20));
display3.setFont(new Font(&宋体&,Font.PLAIN,20));
display1.setDisabledTextColor(Color.BLACK);
display2.setDisabledTextColor(Color.BLACK);
display3.setDisabledTextColor(Color.BLACK);
display1.setBorder(new LineBorder(new Color(242,247,252)));
display2.setBorder(new LineBorder(new Color(242,247,252)));
display3.setBorder(new LineBorder(new Color(242,247,252)));
display1.setBackground(new Color(242,247,252));
display2.setBackground(new Color(242,247,252));
display3.setBackground(new Color(242,247,252));
/**按钮 35px*29px 28个***/
operate=new JButton[28];
/**前24个**/
for(i=0;i&24;i++)
operate[i]=new JButton(name[i]);
operate[i].setMargin(new java.awt.Insets(0,0,0,0));
operate[i].setBounds(i%5*(35+7), 60+i/5*(29+5)+5, 35, 29);
jp.add(operate[i]);
/***=号***/
operate[i]=new JButton(name[i]);
operate[i].setMargin(new java.awt.Insets(0,0,0,0));
operate[i].setBounds(i%5*(35+7), 60+i/5*(29+5)+5, 35, 29*2+5);
jp.add(operate[i]);
/***0号***/
operate[i]=new JButton(name[i]);
operate[i].setMargin(new java.awt.Insets(0,0,0,0));
operate[i].setBounds(i%5*(35+7), 60+i/5*(29+5)+5, 35*2+7, 29);
jp.add(operate[i]);
/**前24个**/
for(i=i+1;i&name.i++)
operate[i]=new JButton(name[i]);
operate[i].setMargin(new java.awt.Insets(0,0,0,0));
operate[i].setBounds((i+1)%5*(35+7), 60+i/5*(29+5)+5, 35, 29);
jp.add(operate[i]);
* 给按钮注册鼠标监听器,键盘监听器和背景
mouseAdapter ml=new mouseAdapter();
keyAdapter kl=new keyAdapter();
for(i=0;i&name.i++)
operate[i].addMouseListener(ml);
operate[i].addKeyListener(kl);
operate[i].setBackground(new Color(233,240,247));
operate[i].setForeground(new Color(30,57,91));
jp.add(display1);
jp.add(display2);
jp.add(display3);
jp.addKeyListener(kl);
this.add(jp);
this.setVisible(true);
class mouseAdapter extends MouseAdapter{
public void mouseClicked(MouseEvent e)
JButton operate=(JButton)e.getSource();
if(Disable)//禁用按钮,点击C 恢复计算器
if(operate.getText()==&C&)
{ clear();
switch(operate.getText())
case &MC&:mc();
case &MR&:mr();
case &MS&:ms();
case &M+&:mAdd();
case &M-&:mCut();
case &←&:cutEnd();
case &CE&:cutNum();
case &C&:clear();
case &±&:revolt();
case &√&:sqrt();
case &0&:read(Integer.parseInt(operate.getText()));//将按键上的文本转化为Int型
case &/&:divide();
case &%&:mo();
case &*&:mul();
case &1/x&:inverted();
case &-&:cut();
case &+&:add();
case &=&:sum();
case &.&:dot();
public void mouseEntered(MouseEvent e)
((JButton)e.getSource()).setBackground(new Color(255,211,113));
public void mouseExited(MouseEvent e)
((JButton)e.getSource()).setBackground(new Color(233,240,247));
取消存储区,清空存储区数据
public void mc()
storage.storageNum=0;
storage.storageMode=
display3.setText(null);
* MR 读取存储器存储的数据
public void mr()
op1.value=storage.storageN
screen2=&&+op1.
if(op1.value==Math.floor(op1.value))
screen2=&&+(int)op1.
display2.setText(screen2);
op1.clear=
* MS 保存数据到存储器
public void ms()
storage.storageNum=op1.
display3.setText(&M&);//屏幕左下角显示M标志
* M+ 已经储存的数加上当前计算结果并将和存入存储器
public void mAdd()
storage.storageNum=storage.storageNum+op1.
* M- 已经储存的数减去当前计算结果并将差存入存储器
public void mCut()
storage.storageNum=storage.storageNum-op1.
* ← 输入的数去掉尾数
public void cutEnd()
if(action==&op1&&&op1.value!=0)//表示对op1进行操作
if(op1.isFloat==false)//如果op1为整数
op1.value=(int)op1.value/10;
screen2=&&+(int)op1.
else{//如果op1为小数
BigDecimal bd=new BigDecimal(op1.value);
op1.value=bd.setScale(--op1.dotWei,BigDecimal.ROUND_DOWN).doubleValue();
screen2=&&+op1.
if(op1.dotWei==0)//小数点后数位都去除掉后,变位整数,更新isFloat标记
op1.isFloat=
else if(action==&op2&&&op2.value!=0)//表示对op2进行操作
if(op2.isFloat==false)//如果op2位整数
op2.value=(int)op2.value/10;
screen2=&&+(int)op2.
else{//如果op2为小数
BigDecimal
bd=new BigDecimal(op2.value);
op2.value=bd.setScale(--op2.dotWei,BigDecimal.ROUND_DOWN ).doubleValue();
screen2=&&+op2.
if(op2.dotWei==0)//小数点后数位都去除掉后,变位整数,更新isFloat标记
op2.isFloat=
display2.setText(screen2);//输出修改后的操作数
* CE 清空当前操作数操作数
public void cutNum()
if(action==&op1&)
op1.reset();
else if(action==&op2&)
op2.reset();
display2.setText(&0&);//初始化显示屏2
* C 归零 重置计算器
public void clear()
op1.reset();
op2.reset();
//初始化数据成员
action=&op1&;
//初始化显示屏
display1.setText(&&);
display2.setText(&0&);
* ± 正负号
public void revolt()
if(action==&op1&)
op1.value=-op1.
screen2=&&+op1.
else if(action==&op2&)
op2.value=-op2.
screen2=&&+op2.
display2.setText(screen2);
public void sqrt()
//临时变量
if(action==&op1&)
op1.sqrtedString=&sqrt(&+op1.value+&)&;
op1.value=Math.sqrt(op1.value);
op1.isSqrted=
op2.sqrtedString=&sqrt(&+op2.value+&)&;
op2.value=Math.sqrt(op2.value);
op2.isSqrted=
screen2=x+&&;
if(x==Math.floor(x))//如果x为整数
screen2=(int)x+&&;//则将浮点数x先转化为int再转化成字符串
display2.setText(screen2);
* 按下数字键
public void read(int value)
display2.setFont(new Font(&宋体&,Font.BOLD,20));//默认字体大小
display2.setText(null);//清屏
if(op1.clear==true)
op1.reset();
if(op2.clear==true)
op2.reset();
if(action==&op1&)//表示输数据给op1
if(op1.isFloat==true)//若op1为浮点数
double num=
++op1.dotW
while(i&=op1.dotWei)
op1.value=op1.value+//将新的小数点位添加到操作数op1中
//因为双精度浮点数 其精度比较高,而我们只需取它的op1.dotWei保存
op1.value=Double.parseDouble(String.format(&%.&+op1.dotWei+&f&,op1.value));
//因为双精度浮点数 其精度比较高,而我们只需取它的op1.dotWei显示在屏幕上
display2.setText(String.format(&%.&+op1.dotWei+&f&, op1.value));
else//op1为整数
op1.value=op1.value*10+//将新的整数位加倒op1中
display2.setText((int)op1.value+&&);//屏幕输出op1的值
else if(action==&op2&)//表示输数据给op2
if(op2.isFloat==true)//若op2为浮点数
double num=
++op2.dotW
while(i&=op2.dotWei)
op2.value=op2.value+//将新的小数点位添加到操作数op2中
//因为双精度浮点数 其精度比较高,而我们只需取它的op2.dotWei保存
op2.value=Double.parseDouble(String.format(&%.&+op2.dotWei+&f&,op2.value));
//因为双精度浮点数 其精度比较高,而我们只需取它的op2.dotWei显示在屏幕上
display2.setText(String.format(&%.&+op2.dotWei+&f&, op2.value));
else//op2为整数
op2.value=op2.value*10+
display2.setText((int)op2.value+&&);
public void divide()
public void mo()
public void mul()
public void inverted()
if(action==&op1&)
op1.invertedString=&1/&+op1.//1/x形式字符串
op1.value=1/op1.
op1.isInverted=
op2.invertedString=&1/&+op2.//1/x形式字符串
op2.value=1/op2.
op1.isInverted=
str=num+&&;
if(str.length()&=16)//计算器屏幕所能显示数据的最大长度
display2.setFont(new Font(&宋体&,Font.BOLD,14));//缩小字体输出
display2.setText(str.substring(0, 16));
display2.setText(str);
public void cut()
public void add()
public void sum()
display2.setFont(new Font(&宋体&,Font.BOLD,20));
int d1=op1.dotWei,d2=op2.dotWei,i;
switch(sign)
//运算后 结果保存到op1中
case &+&:op1.value=op1.value+op2.
case &-&:op1.value=op1.value-op2.
case &*&:op1.value=op1.value*op2.
case &/&:op1.value=op1.value/op2.
case &%&:op1.value=op1.value%op2.
if(op2.value==0&&sign==&/&)//除数为0
display2.setText(op1.value+&&);
display1.setText(null);
action=&op1&;
if(op1.value==Math.floor(op1.value))//结果为整数
display2.setText((int)op1.value+&&);
op1.dotWei=0;
op1.isFloat=
else{//结果为小数
String str=op1.value+&&;
//准确控制算术运算结果的精度,加,减,取模运算,小数点后的有效数字最多为max(d1,d2)位
if(sign.equals(&+&)||sign.equals(&-&)||sign.equals(&%&))
i=d1&d2?d1:d2;
str=op1.value+&&;
str=str.substring(0, str.indexOf(&.&)+i+1);//取i位输出
//准确控制算术运算结果的精度,乘法运算,小数点后的有效数字最多为d1+d2位
else if(sign.equals(&*&))
BigDecimal bd=new BigDecimal(op1.value);
op1.value=bd.setScale(i,BigDecimal.ROUND_DOWN ).doubleValue();
str=op1.value+&&;//更新修改后的str
//结果超过显示数据的最大长度
if(str.length()&=16)
display2.setFont(new Font(&宋体&,Font.BOLD,14));
str=str.substring(0, 16);
display2.setText(str);
op1.dotWei=str.length()-str.indexOf(&.&)-1;//更新op1w值
display1.setText(null);
action=&op1&;
op1.clear=//开始新的表达式运算时,op1要先重置
op2.clear=//开始新的表达式运算时,op2要先重置
public void dot()
if(action==&op1&)
op1.isFloat=
op2.isFloat=
display2.setText(display2.getText()+&.&);
public void run(String SIGN)
display2.setFont(new Font(&宋体&,Font.BOLD,20));
action=&op2&;
int d1=op1.dotWei,d2=op2.dotWei,i;
if(!sign.equals(&&))//检测是否为以为表达式的第一运算
switch(sign)
{//运算后 结果保存到op1中
case &+&:op1.value=op1.value+op2.
case &-&:op1.value=op1.value-op2.
case &*&:op1.value=op1.value*op2.
case &/&:op1.value=op1.value/op2.
case &%&:op1.value=op1.value%op2.
String temp=isSpecileHandle();
if(temp==null)
temp=display2.getText();//先保存display2文本框里的数据
if(op2.value==0&&sign==&/&)//除数为0
display2.setText(op1.value+&&);
display1.setText(display1.getText()+op1.value);
if(op1.value==Math.floor(op1.value))//结果为整数
display2.setText((int)op1.value+&&);
op1.dotWei=0;
op1.isFloat=
String str=op1.value+&&;
//准确控制算术运算结果的精度,加,减,取模运算,小数点后的有效数字最多为max(d1,d2)位
if(sign.equals(&+&)||sign.equals(&-&)||sign.equals(&%&))
i=d1&d2?d1:d2;
BigDecimal bd=new BigDecimal(op1.value);
op1.value=bd.setScale(i,BigDecimal.ROUND_DOWN ).doubleValue();
str=op1.value+&&;//更新修改后的str
//准确控制算术运算结果的精度,乘法运算,小数点后的有效数字最多为d1+d2位
else if(sign.equals(&*&))
BigDecimal bd=new BigDecimal(op1.value);
op1.value=bd.setScale(i,BigDecimal.ROUND_DOWN ).doubleValue();
str=op1.value+&&;//更新修改后的str
//结果超过显示数据的最大长度
if(str.length()&=16)
display2.setFont(new Font(&宋体&,Font.BOLD,14));
str=str.substring(0, 16);
display2.setText(str);
op1.dotWei=str.length()-str.indexOf(&.&)-1;//每次加完后,如果结果op1的值为小数则更新op1w的值
sign=SIGN;
display1.setText(display1.getText()+temp+sign);
op2.value=op1.//运算后,操作数op2默认的值为op1的值
op2.clear=//下一次键入数据,op2要重置
op1.clear=//下一次键入数据,op1不要重置
* isSpecileHandle()
* 操作数是否sqrt()或1/x过,
* 如果有,则返回&sqrt(x)&或&1/x&字符串
public String isSpecileHandle()
String temp=
if(op1.isSqrted)
temp=op1.sqrtedS
op1.isSqrted=
else if(op2.isSqrted)
temp=op2.sqrtedS
op2.isSqrted=
if(op1.isInverted)
temp=op1.invertedS
op1.isInverted=
else if(op2.isInverted)
temp=op2.invertedS
op2.isInverted=
class keyAdapter extends KeyAdapter{
public void keyPressed(KeyEvent e)
int keycode=e.getKeyCode();
if((keycode&=96&&keycode&=105)||(keycode&=48&&keycode&=57))//数字键
if(keycode&=96)
keycode-=48;
switch(keycode)
case 48:read(0);
case 49:read(1);
case 50:read(2);
case 51:read(3);
case 52:read(4);
case 53:read(5);
case 54:read(6);
case 55:read(7);
case 56:read(8);
case 57:read(9);
//运算符键+ - * / =和. 以及退格键(* =号)
else if((keycode==110||keycode==46)||(keycode==111||keycode==47)||(keycode==45||keycode==109)||keycode==107||keycode==106||keycode==61||keycode==10||keycode==8)
if((keycode==110||keycode==46))
else if(keycode==111||keycode==47)
else if(keycode==45||keycode==109)
else if(keycode==107)
else if(keycode==106)
else if(keycode==61||keycode==10)//=号
else if(keycode==8)
public static void main(String[] args) {
// TODO Auto-generated method stub
calc app=new calc();
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:35802次
积分:1243
积分:1243
排名:千里之外
原创:83篇
转载:34篇
阅读:1565
(2)(13)(11)(3)(27)(17)(16)(3)(1)(6)(6)(8)(1)(4)(1)(1)(3)java模仿windows计算器示例
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了java模仿windows计算器示例,需要的朋友可以参考下
这个计算器的界面模仿Windows自带的简易计算器,包括交互界面和和对各种输入的响应。目前尚未实现菜单栏和记忆类按钮的功能
代码如下:import java.awt.Cimport java.awt.Cimport java.awt.GridLimport java.awt.Iimport java.awt.event.ActionEimport java.awt.event.ActionL
import javax.swing.JFimport javax.swing.JBimport javax.swing.JMimport javax.swing.JMenuBimport javax.swing.JMenuIimport javax.swing.JPimport javax.swing.JTextFimport javax.swing.SwingCimport javax.swing.plaf.basic.BasicB
public class Calculator extends JFrame {&private static final long serialVersionUID = 1L;&Container c = getContentPane();&StringBuilder number1 = new StringBuilder("");// 储存第1个数字字符串&StringBuilder number2 = new StringBuilder("");// 储存第2个数字字符串&StringBuilder operator = new StringBuilder("");// 储存运算符&StringBuilder result = new StringBuilder("");// 储存运算结果&JTextField numbershow = new JTextField("0.");// 数字显示区域,初始显示为"0."
&public static void main(String[] args) {// 主方法&&Calculator c1 = new Calculator();&&c1.setVisible(true);&}
&public Calculator() {// 计算器构造方法&&setTitle("计算器");&&setBounds(100, 100, 260, 245);&&setResizable(false);&&setLayout(null);&&setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&&createMenuBar();// 创建菜单栏&&createNumberShow();// 创建数字显示区域&&createMemoShow();// 创建记忆显示&&createClearButtons();// 创建Backspace,CE,C等三个按钮&&createButtonArea();// 创建数字按钮区域&}
&private void createMenuBar() {// 创建菜单栏的方法&&JMenuBar menubar = new JMenuBar();&&setJMenuBar(menubar);&&JMenu menu1 = new JMenu("编辑");&&JMenu menu2 = new JMenu("查看");&&JMenu menu3 = new JMenu("帮助");&&menubar.add(menu1);&&menubar.add(menu2);&&menubar.add(menu3);&&JMenuItem menu1item1 = new JMenuItem("复制");&&JMenuItem menu1item2 = new JMenuItem("粘贴");&&JMenuItem menu2item1 = new JMenuItem("标准型");&&JMenuItem menu2item2 = new JMenuItem("科学型");&&JMenuItem menu2item3 = new JMenuItem("科学分组");&&JMenuItem menu3item1 = new JMenuItem("帮助主题");&&JMenuItem menu3item2 = new JMenuItem("关于计算器");&&menu1.add(menu1item1);&&menu1.add(menu1item2);&&menu2.add(menu2item1);&&menu2.add(menu2item2);&&menu2.add(menu2item3);&&menu3.add(menu3item1);&&menu3.add(menu3item2);&}
&private void createNumberShow() {// 创建数字显示区域的方法&&numbershow.setHorizontalAlignment(JTextField.RIGHT);&&numbershow.setBounds(5, 0, 245, 22);&&numbershow.setEnabled(false);&&numbershow.setDisabledTextColor(Color.BLACK);&&c.add(numbershow);&}
&private void createMemoShow() {// 创建记忆显示的方法&&JTextField memoshow = new JTextField();&&memoshow.setEditable(false);&&memoshow.setBounds(10, 30, 28, 22);&&memoshow.setBorder(new BasicBorders.FieldBorder(Color.black,&&&&Color.black, Color.white, Color.white));&&c.add(memoshow);&}
&private void createClearButtons() {// 创建Backspace,CE,C等三个按钮的方法&&JButton[] clearbutton = new JButton[3];&&String[] clearbuttontext = { "Backspace", "CE", "C" };&&for (int i = 0; i & 3; i++) {&&&clearbutton[i] = new JButton();&&&clearbutton[i].setText(clearbuttontext[i]);&&&clearbutton[i].setHorizontalAlignment(SwingConstants.CENTER);&&&clearbutton[i].setMargin(new Insets(0, 0, 0, 0));&&&clearbutton[i].setFont(new java.awt.Font("Arial", 0, 9));&&&clearbutton[i].setForeground(Color.blue);&&&clearbutton[i].setBounds(48 + i * 68, 30, 63, 22);&&&clearbutton[i].setForeground(Color.red);&&&c.add(clearbutton[i]);&&}
&&clearbutton[0].addActionListener(new ActionListener() {// 为Backspace按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&if (number1.toString().equals("")) {// 如果未做任何输入&&&&&&&showNumber(numbershow, number1);// 显示number1&&&&&&} else if (operator.toString().equals("")) {// 如果只输入了number1&&&&&&&number1.deleteCharAt(number1.toString().length() - 1);// 将number1的最后一个字符去掉&&&&&&&showNumber(numbershow, number1);// 显示number1&&&&&&} else if (number2.toString().equals("")) {// 如果只输入了number1和operator&&&&&&&showNumber(numbershow, number1);// 不作任何处理,显示number1&&&&&&} else {// 如果输入了number1、operator、number2&&&&&&&number2.deleteCharAt(number2.toString().length() - 1);// 将number2的最后一个字符去掉&&&&&&&showNumber(numbershow, number2);// 显示number2&&&&&&}&&&&&}&&&&});
&&clearbutton[1].addActionListener(new ActionListener() {// 为CE按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&if (number1.toString().equals("")) {// 如果未做任何输入&&&&&&&showNumber(numbershow, number1);// 显示number1&&&&&&} else if (operator.toString().equals("")) {// 如果只输入了number1&&&&&&&number1.setLength(0);// 清除number1&&&&&&&showNumber(numbershow, number1);// 显示number1&&&&&&} else if (number2.toString().equals("")) {// 如果输入了number1和operator&&&&&&&showNumber(numbershow, number2);// 不作任何处理,显示number2&&&&&&} else {// 如果输入了number1、operator、number2&&&&&&&number2.setLength(0);// 清除number2&&&&&&&showNumber(numbershow, number2);// 显示number2&&&&&&}&&&&&}&&&&});
&&clearbutton[2].addActionListener(new ActionListener() {// 为C按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {// 将所有储存清零&&&&&&number1.setLength(0);&&&&&&number2.setLength(0);&&&&&&operator.setLength(0);&&&&&&numbershow.setText("0.");&&&&&&result.setLength(0);&&&&&}&&&&});&}
&private void createButtonArea() {// 创建数字按钮区域的方法&&JPanel ButtonArea = new JPanel();&&ButtonArea.setBounds(5, 55, 245, 125);&&ButtonArea.setLayout(new GridLayout(4, 6, 5, 5));&&c.add(ButtonArea);
&&JButton[] numberbutton = new JButton[24];&&String[] numberbuttontext = { "MC", "7", "8", "9", "/", "sqrt", "MR",&&&&"4", "5", "6", "*", "%", "MS", "1", "2", "3", "-", "1/X", "M+",&&&&"0", "+/-", ".", "+", "=" };&&for (int i = 0; i & 24; i++) {// 使用循环为这24个按钮添加标识&&&numberbutton[i] = new JButton(numberbuttontext[i]);&&&ButtonArea.add(numberbutton[i]);&&&if (i % 6 == 0 || i % 6 == 4 || i == 23) {// 操作符按钮设置为红色&&&&numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);&&&&numberbutton[i].setMargin(new Insets(0, 0, 0, 0));&&&&numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));&&&&numberbutton[i].setForeground(Color.red);&&&} else {// 其它设置为蓝色&&&&numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);&&&&numberbutton[i].setMargin(new Insets(0, 0, 0, 0));&&&&numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));&&&&numberbutton[i].setForeground(Color.blue);&&&}&&}
&&int[] numbers = { 19, 13, 14, 15, 7, 8, 9, 1, 2, 3 };// 该数组中的数字分别代表0-9等数字在numberbuttontext数组中序号&&for (int i = 0; i &= 9; i++) { // 使用循环为这0-9这十个数字按钮添加监听器&&&final String str = String.valueOf(i);&&&numberbutton[numbers[i]].addActionListener(new ActionListener() {// 为0-9按钮添加监听器&&&&&&@Override&&&&&&public void actionPerformed(ActionEvent e) {&&&&&&&if (operator.toString().equals("")) {// 没有输入operator之前&&&&&&&&add(number1, str); // 只设置number1的值&&&&&&&&showNumber(numbershow, number1);// 只显示number1的值&&&&&&&} else {// 输入operator之后&&&&&&&&add(number2, str);// 只设置number2的值&&&&&&&&showNumber(numbershow, number2);// 只显示number2的值&&&&&&&}&&&&&&}&&&&&});&&}
&&numberbutton[20].addActionListener(new ActionListener() { // 为"+/-"按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&if (operator.toString().equals("")) {// 没有输入operator之前&&&&&&&add(number1, "+/-");// 只设置number1的值&&&&&&&showNumber(numbershow, number1);// 只显示number1的值&&&&&&} else {// 输入operator之后&&&&&&&add(number2, "+/-");// 只设置number2的值&&&&&&&showNumber(numbershow, number2);// 只显示number2的值&&&&&&}&&&&&}&&&&});
&&numberbutton[21].addActionListener(new ActionListener() { // 为"."按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&if (operator.toString().equals("")) {// 在输入operator之前,只显示number1的值&&&&&&&add(number1, ".");&&&&&&&showNumber(numbershow, number1);&&&&&&} else {// 在输入operator之后,只显示number2的值&&&&&&&add(number2, ".");&&&&&&&showNumber(numbershow, number2);&&&&&&}&&&&&}&&&&});
&&numberbutton[22].addActionListener(new ActionListener() { // 为"+"按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&operator.setLength(0);&&&&&&operator.append("+");&&&&&}&&&&});
&&numberbutton[16].addActionListener(new ActionListener() { // 为"-"按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&operator.setLength(0);&&&&&&operator.append("-");&&&&&}&&&&});
&&numberbutton[10].addActionListener(new ActionListener() { // 为"*"按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&operator.setLength(0);&&&&&&operator.append("*");&&&&&}&&&&});
&&numberbutton[4].addActionListener(new ActionListener() { // 为"/"按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&operator.setLength(0);&&&&&&operator.append("/");&&&&&}&&&&});
&&numberbutton[23].addActionListener(new ActionListener() { // 为"="按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&if (number1.toString().equals("")) {// 当number1为空时&&&&&&&showNumber(numbershow, number1);&&&&&&} else if (operator.toString().equals("")) {// 当number1不为空,而operator为空时&&&&&&&showNumber(numbershow, number1);&&&&&&} else if (number2.toString().equals("")) {// 当number1、operator均不为空,而number2为空时&&&&&&&switch (operator.toString()) {&&&&&&&case ("+"): {&&&&&&&&number2.append(number1.toString());&&&&&&&&double d = Double.parseDouble(number1&&&&&&&&&&.toString())&&&&&&&&&&+ Double.parseDouble(number2.toString());&&&&&&&&result.setLength(0);&&&&&&&&result.append(d);&&&&&&&&showNumber(numbershow, result);&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);&&&&&&&}&&&&&&&&&&&&&&&case ("-"): {&&&&&&&&number2.append(number1.toString());&&&&&&&&double d = Double.parseDouble(number1&&&&&&&&&&.toString())&&&&&&&&&&- Double.parseDouble(number2.toString());&&&&&&&&result.setLength(0);&&&&&&&&result.append(d);&&&&&&&&showNumber(numbershow, result);&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);&&&&&&&}&&&&&&&&&&&&&&&case ("*"): {&&&&&&&&number2.append(number1.toString());&&&&&&&&double d = Double.parseDouble(number1&&&&&&&&&&.toString())&&&&&&&&&&* Double.parseDouble(number2.toString());&&&&&&&&result.setLength(0);&&&&&&&&result.append(d);&&&&&&&&showNumber(numbershow, result);&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);&&&&&&&}&&&&&&&&&&&&&&&case ("/"): {&&&&&&&&number2.append(number1.toString());&&&&&&&&double d = Double.parseDouble(number1&&&&&&&&&&.toString())&&&&&&&&&&/ Double.parseDouble(number2.toString());&&&&&&&&result.setLength(0);&&&&&&&&result.append(d);&&&&&&&&showNumber(numbershow, result);&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);&&&&&&&}&&&&&&&&&&&&&&&}&&&&&&} else {// 当number1、operator、number2均不为空时&&&&&&&switch (operator.toString()) {&&&&&&&case ("+"): {&&&&&&&&double d = Double.parseDouble(number1&&&&&&&&&&.toString())&&&&&&&&&&+ Double.parseDouble(number2.toString());&&&&&&&&result.setLength(0);&&&&&&&&result.append(d);&&&&&&&&showNumber(numbershow, result);&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);&&&&&&&}&&&&&&&&&&&&&&&case ("-"): {&&&&&&&&double d = Double.parseDouble(number1&&&&&&&&&&.toString())&&&&&&&&&&- Double.parseDouble(number2.toString());&&&&&&&&result.setLength(0);&&&&&&&&result.append(d);&&&&&&&&showNumber(numbershow, result);&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);&&&&&&&}&&&&&&&&&&&&&&&case ("*"): {&&&&&&&&double d = Double.parseDouble(number1&&&&&&&&&&.toString())&&&&&&&&&&* Double.parseDouble(number2.toString());&&&&&&&&result.setLength(0);&&&&&&&&result.append(d);&&&&&&&&showNumber(numbershow, result);&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);&&&&&&&}&&&&&&&&&&&&&&&case ("/"): {&&&&&&&&double d = Double.parseDouble(number1&&&&&&&&&&.toString())&&&&&&&&&&/ Double.parseDouble(number2.toString());&&&&&&&&result.setLength(0);&&&&&&&&result.append(d);&&&&&&&&showNumber(numbershow, result);&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);&&&&&&&}&&&&&&&&&&&&&&&}&&&&&&}&&&&&}&&&&});
&&numberbutton[17].addActionListener(new ActionListener() { // 为"1/x"按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&if (number1.toString().equals("")) {// 没有输入number1时&&&&&&&numbershow.setText("除数不能为零");&&&&&&} else if (operator.toString().equals("")) {// 输入了number1,但没有输入operator&&&&&&&if (Double.parseDouble(number1.toString()) == 0) {// 如果number1的值为零&&&&&&&&numbershow.setText("除数不能为零");&&&&&&&} else {// 如果number1的值不为零&&&&&&&&double d = 1 / (Double.parseDouble(number1&&&&&&&&&&.toString()));&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);// 将number1的值开放并存储&&&&&&&&showNumber(numbershow, number1);&&&&&&&}&&&&&&} else if (number2.toString().equals("")) {// 输入了number1、operator,但没有输入number2&&&&&&&double d = 1 / (Double.parseDouble(number1&&&&&&&&&.toString()));&&&&&&&number2.append(d);// 将number1的值开放并存储&&&&&&&showNumber(numbershow, number2);&&&&&&} else {// 输入了number1、operator,number2&&&&&&&double d = 1 / (Double.parseDouble(number2&&&&&&&&&.toString()));&&&&&&&number2.setLength(0);&&&&&&&number2.append(d);// 将number2的值开放并存储&&&&&&&showNumber(numbershow, number2);&&&&&&}&&&&&}&&&&});
&&numberbutton[11].addActionListener(new ActionListener() { // 为"%"按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&// 暂时空缺&&&&&}&&&&});
&&numberbutton[5].addActionListener(new ActionListener() { // 为"sqrt"按钮添加监听器&&&&&@Override&&&&&public void actionPerformed(ActionEvent e) {&&&&&&if (number1.toString().equals("")) {// 没有输入number1时&&&&&&&showNumber(numbershow, number1);&&&&&&} else if (operator.toString().equals("")) {// 输入了number1,但没有输入operator&&&&&&&if (Double.parseDouble(number1.toString()) & 0) {// number1小于0&&&&&&&&numbershow.setText("函数输入无效");&&&&&&&} else {// number1大于0&&&&&&&&double d = Math.sqrt(Double.parseDouble(number1&&&&&&&&&&.toString()));&&&&&&&&number1.setLength(0);&&&&&&&&number1.append(d);// 将number1的值开放并存储&&&&&&&&showNumber(numbershow, number1);&&&&&&&}&&&&&&} else if (number2.toString().equals("")) {// 输入了number1、operator,但没有输入number2&&&&&&&double d = Math.sqrt(Double.parseDouble(number1&&&&&&&&&.toString()));&&&&&&&number2.append(d);// 将number1的值开放并存储&&&&&&&showNumber(numbershow, number2);&&&&&&} else {// 输入了number1、operator、number2&&&&&&&double d = Math.sqrt(Double.parseDouble(number2&&&&&&&&&.toString()));&&&&&&&number2.setLength(0);&&&&&&&number2.append(d);// 将number2的值开放并存储&&&&&&&showNumber(numbershow, number2);&&&&&&}&&&&&}&&&&});&}
&public void add(StringBuilder s1, String s2) {// 定义按钮输入后数字字符串变化的方法&&if (s2.equals("+/-")) {// 定义输入"+/-"后数字字符串的变化&&&if (s1.toString().equals("") || s1.toString().equals("0")) {// 如果数字字符串为空或者0,那么不发生变化&&&&s1.append("");&&&} else {// 如果数字字符串不为空也不为0,那么在数字字符串前增加或删除"-"字符&&&&if (s1.toString().startsWith("-")) {&&&&&s1.deleteCharAt(0);&&&&} else {&&&&&s1.insert(0, "-");&&&&}&&&}&&}&&if (s2.equals(".")) {// 定义输入"."后数字字符串的变化&&&if (s1.toString().indexOf(".") == -1) {// 查找数字字符串中是否含有"."字符,如果没有则执行以下代码&&&&if (s1.toString().equals("")) {// 如果数字字符串为空,那么将数字字符串设置为"0."&&&&&s1.setLength(0);&&&&&s1.append("0.");&&&&} else {&&&&&s1.append(".");&&&&}&&&} else {// 如果有,则不发生变化&&&&s1.append("");&&&}&&}&&if (s2.equals("0")) {// 定义输入"0"后数字字符串的变化&&&if (s1.toString().equals("0")) {// 当数字的字符串为"0"时,不发生变化&&&&s1.append("");&&&} else {// 当数字的字符串吧为"0"时,在其字符串后增加"0"&&&&s1.append("0");&&&}&&}&&for (int i = 1; i & 10; i++) {// 通过循环,定义输入1-9后数字字符串的变化&&&String str = String.valueOf(i);&&&if (s2.equals(str)) {// 定义输入1-9后数字字符串的变化&&&&if (s1.toString().equals("0")) {&&&&&s1.setLength(0);&&&&&s1.append(str);&&&&} else&&&&&s1.append(str);&&&}&&}&}
&public void showNumber(JTextField j, StringBuilder s) {// 定义数字显示区域如何显示数字字符串的方法&&if (s.toString().equals("") == true || s.toString().equals("0") == true) {&&&j.setText("0.");&&} else if (s.toString().indexOf(".") == -1) {&&&j.setText(s.toString() + ".");&&} else {&&&j.setText(s.toString());&&}&}}
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 java编写简易计算器 的文章

 

随机推荐