问题描述
JAVA计算器编写用到哪些
解决方案
解决方案二:
注释写的很详细packageswing;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextField;/***一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。但还不支持键盘操作。*/publicclassCalculatorextendsJFrameimplementsActionListener{/**计算器上的键的显示名字*/privatefinalString[]KEYS={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};/**计算器上的功能键的显示名字*/privatefinalString[]COMMAND={"Backspace","CE","C"};/**计算器左边的M的显示名字*/privatefinalString[]M={"","MC","MR","MS","M+"};/**计算器上键的按钮*/privateJButtonkeys[]=newJButton[KEYS.length];/**计算器上的功能键的按钮*/privateJButtoncommands[]=newJButton[COMMAND.length];/**计算器左边的M的按钮*/privateJButtonm[]=newJButton[M.length];/**计算结果文本框*/privateJTextFieldresultText=newJTextField("0");//标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字privatebooleanfirstDigit=true;//计算的中间结果。privatedoubleresultNum=0.0;//当前运算的运算符privateStringoperator="=";//操作是否合法privatebooleanoperateValidFlag=true;/***构造函数*/publicCalculator(){super();//初始化计算器init();//设置计算器的背景颜色this.setBackground(Color.LIGHT_GRAY);this.setTitle("计算器");//在屏幕(500,300)坐标处显示计算器this.setLocation(500,300);//不许修改计算器的大小this.setResizable(false);//使计算器中各组件大小合适this.pack();}/***初始化计算器*/privatevoidinit(){//文本框中的内容采用右对齐方式resultText.setHorizontalAlignment(JTextField.RIGHT);//不允许修改结果文本框resultText.setEditable(false);//设置文本框背景颜色为白色resultText.setBackground(Color.white);//初始化计算器上键的按钮,将键放在一个画板内JPanelcalckeysPanel=newJPanel();//用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素calckeysPanel.setLayout(newGridLayout(4,5,3,3));for(inti=0;i<KEYS.length;i++){keys[i]=newJButton(KEYS[i]);calckeysPanel.add(keys[i]);keys[i].setForeground(Color.blue);}//运算符键用红色标示,其他键用蓝色表示keys[3].setForeground(Color.red);keys[8].setForeground(Color.red);keys[13].setForeground(Color.red);keys[18].setForeground(Color.red);keys[19].setForeground(Color.red);//初始化功能键,都用红色标示。将功能键放在一个画板内JPanelcommandsPanel=newJPanel();//用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素commandsPanel.setLayout(newGridLayout(1,3,3,3));for(inti=0;i<COMMAND.length;i++){commands[i]=newJButton(COMMAND[i]);commandsPanel.add(commands[i]);commands[i].setForeground(Color.red);}//初始化M键,用红色标示,将M键放在一个画板内JPanelcalmsPanel=newJPanel();//用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素calmsPanel.setLayout(newGridLayout(5,1,3,3));for(inti=0;i<M.length;i++){m[i]=newJButton(M[i]);calmsPanel.add(m[i]);m[i].setForeground(Color.red);}//下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部,//将文本框放在北部,将calms画板放在计算器的西部。//新建一个大的画板,将上面建立的command和calckeys画板放在该画板内JPanelpanel1=newJPanel();//画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素panel1.setLayout(newBorderLayout(3,3));panel1.add("North",commandsPanel);panel1.add("West",calckeysPanel);//建立一个画板放文本框JPaneltop=newJPanel();top.setLayout(newBorderLayout());top.add("Center",resultText);//整体布局getContentPane().setLayout(newBorderLayout(3,5));getContentPane().add("North",top);getContentPane().add("Center",panel1);getContentPane().add("West",calmsPanel);//为各按钮添加事件侦听器//都使用同一个事件侦听器,即本对象。本类的声明中有implementsActionListenerfor(inti=0;i<KEYS.length;i++){keys[i].addActionListener(this);}for(inti=0;i<COMMAND.length;i++){commands[i].addActionListener(this);}for(inti=0;i<M.length;i++){m[i].addActionListener(this);}}/***处理事件*/publicvoidactionPerformed(ActionEvente){//获取事件源的标签Stringlabel=e.getActionCommand();if(label.equals(COMMAND[0])){//用户按了"Backspace"键handleBackspace();}elseif(label.equals(COMMAND[1])){//用户按了"CE"键resultText.setText("0");}elseif(label.equals(COMMAND[2])){//用户按了"C"键handleC();}elseif("0123456789.".indexOf(label)>=0){//用户按了数字键或者小数点键handleNumber(label);//handlezero(zero);}else{//用户按了运算符键handleOperator(label);}}/***处理Backspace键被按下的事件*/privatevoidhandleBackspace(){Stringtext=resultText.getText();inti=text.length();if(i>0){//退格,将文本最后一个字符去掉text=text.substring(0,i-1);if(text.length()==0){//如果文本没有了内容,则初始化计算器的各种值resultText.setText("0");firstDigit=true;operator="=";}else{//显示新的文本resultText.setText(text);}}}/***处理数字键被按下的事件**@paramkey*/privatevoidhandleNumber(Stringkey){if(firstDigit){//输入的第一个数字resultText.setText(key);}elseif((key.equals("."))&&(resultText.getText().indexOf(".")<0)){//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面resultText.setText(resultText.getText()+".");}elseif(!key.equals(".")){//如果输入的不是小数点,则将数字附在结果文本框的后面resultText.setText(resultText.getText()+key);}//以后输入的肯定不是第一个数字了firstDigit=false;}/***处理C键被按下的事件*/privatevoidhandleC(){//初始化计算器的各种值resultText.setText("0");firstDigit=true;operator="=";}/***处理运算符键被按下的事件**@paramkey*/privatevoidhandleOperator(Stringkey){if(operator.equals("/")){//除法运算//如果当前结果文本框中的值等于0if(getNumberFromText()==0.0){//操作不合法operateValidFlag=false;resultText.setText("除数不能为零");}else{resultNum/=getNumberFromText();}}elseif(operator.equals("1/x")){//倒数运算if(resultNum==0.0){//操作不合法operateValidFlag=false;resultText.setText("零没有倒数");}else{resultNum=1/resultNum;}}elseif(operator.equals("+")){//加法运算resultNum+=getNumberFromText();}elseif(operator.equals("-")){//减法运算resultNum-=getNumberFromText();}elseif(operator.equals("*")){//乘法运算resultNum*=getNumberFromText();}elseif(operator.equals("sqrt")){//平方根运算resultNum=Math.sqrt(resultNum);}elseif(operator.equals("%")){//百分号运算,除以100resultNum=resultNum/100;}elseif(operator.equals("+/-")){//正数负数运算resultNum=resultNum*(-1);}elseif(operator.equals("=")){//赋值运算resultNum=getNumberFromText();}if(operateValidFlag){//双精度浮点数的运算longt1;doublet2;t1=(long)resultNum;t2=resultNum-t1;if(t2==0){resultText.setText(String.valueOf(t1));}else{resultText.setText(String.valueOf(resultNum));}}//运算符等于用户按的按钮operator=key;firstDigit=true;operateValidFlag=true;}/***从结果文本框中获取数字**@return*/privatedoublegetNumberFromText(){doubleresult=0;try{result=Double.valueOf(resultText.getText()).doubleValue();}catch(NumberFormatExceptione){}returnresult;}publicstaticvoidmain(Stringargs[]){Calculatorcalculator1=newCalculator();calculator1.setVisible(true);calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
解决方案三:
java中的swing、swing.event、awt、awt.event都是必须要引入的包;事件监听器是很关键的部分;首先设计界面,再逐个做按钮里面的代码。
解决方案四:
后缀表达式、表达式二叉树