首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个计算器的计算方法的有关问题

2011-12-18 
一个计算器的计算方法的问题代码如下:importjava.awt.*importjava.awt.event.*importjavax.swing.*publ

一个计算器的计算方法的问题
代码如下:
import   java.awt.*;
import   java.awt.event.*;
import   javax.swing.*;

public   class   JFrameCalculator{
public   static   void   main(String   args[]){
JFrameCalculatorClass   JFC=new   JFrameCalculatorClass();
JFC.CalculatorDisplay();
}
}

class   JFrameCalculatorClass   extends   JFrame{
double   result;
boolean   start;
String   lastStrMethod;
Container   container=getContentPane();
JPanel   p1=new   JPanel();
JPanel   p2=new   JPanel();
JPanel   p3=new   JPanel();
JTextField   txtField=new   JTextField( "0 ",24);
JButton   []btn=new   JButton[11];
ActionListener   btnNumAction=new   NumberCountAction();
ActionListener   CountMethod=new   CountMethodClass();
//构造函数
JFrameCalculatorClass(){
result=0;
start=true;
lastStrMethod= "= ";

p1.add(txtField);

btn[0]=new   JButton( "1 ");
btn[1]=new   JButton( "2 ");
btn[2]=new   JButton( "3 ");
btn[3]=new   JButton( "4 ");
btn[4]=new   JButton( "5 ");
btn[5]=new   JButton( "6 ");
btn[6]=new   JButton( "7 ");
btn[7]=new   JButton( "8 ");
btn[8]=new   JButton( "9 ");
btn[9]=new   JButton( "0 ");  
btn[10]=new   JButton( ". ");

p2.setLayout(new   GridLayout(4,3,7,7));
for(int   i=0;i <11;i++){
btn[i].addActionListener(btnNumAction);
p2.add(btn[i]);
}

addButton( "+ ",CountMethod);
addButton( "- ",CountMethod);
addButton( "* ",CountMethod);
addButton( "/ ",CountMethod);
addButton( "= ",CountMethod);

}
//实例化数字按键
void   addButton(String   method,ActionListener   listener){
JButton   btn=new   JButton(method);
btn.addActionListener(listener);
p3.add(btn);
}

//构建窗体
public   void   CalculatorDisplay(){
container.add(new   JLabel( "       "),BorderLayout.WEST);
container.add(new   JLabel( "       "),BorderLayout.EAST);
container.add(p1,BorderLayout.NORTH);
container.add(p2,BorderLayout.CENTER);
container.add(p3,BorderLayout.SOUTH);
setSize(300,250);
setLocation(250,250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);  
}
//获得文本框内的数据
  class   NumberCountAction   implements   ActionListener{
public   void   actionPerformed(ActionEvent   e){
String   input=e.getActionCommand();
if(start){
txtField.setText( " ");
start=false;
}
txtField.setText(txtField.getText()+input);
}
}
//设置文本框输入符号
class   CountMethodClass   implements   ActionListener{
public   void   actionPerformed(ActionEvent   e){
String   strMethod=e.getActionCommand();
if(start){
if(strMethod.equals( "- ")){
txtField.setText(strMethod);
start=false;
}else{
lastStrMethod=strMethod;
}
}else{
Calculate(Double.parseDouble(txtField.getText()));
lastStrMethod=strMethod;
start=true;


}
}
}
//计算方法
public   void   Calculate(double   x){
if(lastStrMethod.equals( "+ ")){
result=result+x;
}else   if(lastStrMethod.equals( "- ")){
result=result-x;
}else   if(lastStrMethod.equals( "* ")){
result=result*x;
}else   if(lastStrMethod.equals( "/ ")){
result=result/x;
}else   if(lastStrMethod.equals( "= ")){
result=x;
}
txtField.setText( " "+result);
}
}

最后的计算方法始终不明白.望各位解答.多谢!

[解决办法]
那用我的吧的
看看这个功能比较全点
我还有功能更全的

详细代码如下:
/*编程实现一个简单的计算器,它包括0-9的数字按钮,加、减、乘、除、清零、等号几个简单运算按钮和一个显示最后结果的文本区域
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator extends JFrame {

private Container container;
private GridBagLayout layout;
private GridBagConstraints constraints;
private JTextField displayField;//计算结果显示区
private String lastCommand;//保存+,-,*,/,=命令
private double result;//保存计算结果
private boolean start;//判断是否为数字的开始

public Calculator() {

super( "Calculator ");
container=getContentPane();
layout=new GridBagLayout();
container.setLayout(layout);
constraints=new GridBagConstraints();
start=true;
result=0;
lastCommand = "= ";
displayField=new JTextField(20);
displayField.setHorizontalAlignment(JTextField.RIGHT);
constraints.gridx=0;
constraints.gridy=0;
constraints.gridwidth=4;
constraints.gridheight=1;
constraints.fill=GridBagConstraints.BOTH;
constraints.weightx=100;
constraints.weighty=100;
layout.setConstraints(displayField,constraints);
container.add(displayField);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
addButton( "Backspace ",0,1,2,1,insert);
addButton( "CE ",2,1,1,1,insert);
addButton( "C ",3,1,1,1,insert);
addButton( "7 ",0,2,1,1,insert);
addButton( "8 ",1,2,1,1,insert);
addButton( "9 ",2,2,1,1,insert);
addButton( "/ ",3,2,1,1,command);
addButton( "4 ",0,3,1,1,insert);
addButton( "5 ",1,3,1,1,insert);
addButton( "6 ",2,3,1,1,insert);
addButton( "* ",3,3,1,1,command);
addButton( "1 ",0,4,1,1,insert);
addButton( "2 ",1,4,1,1,insert);
addButton( "3 ",2,4,1,1,insert);
addButton( "- ",3,4,1,1,command);
addButton( "0 ",0,5,1,1,insert);
addButton( "+/- ",1,5,1,1,insert);//只显示 "- "号, "+ "没有实用价值
addButton( ". ",2,5,1,1,insert);
addButton( "+ ",3,5,1,1,command);
addButton( "= ",0,6,4,1,command);
setSize(400,400);
setVisible(true);

}


private void addButton(String label,int row,int column,int with,int height,ActionListener listener) {

JButton button=new JButton(label);
constraints.gridx=row;
constraints.gridy=column;
constraints.gridwidth=with;
constraints.gridheight=height;
constraints.fill=GridBagConstraints.BOTH;
button.addActionListener(listener);
layout.setConstraints(button,constraints);
container.add(button);
}


private class InsertAction implements ActionListener {

public void actionPerformed(ActionEvent event) {

String input=event.getActionCommand();


if (start) {
displayField.setText( " ");
start=false;
if(input.equals( "+/- "))
displayField.setText(displayField.getText()+ "- ");
}

if(!input.equals( "+/- ")) {
if(input.equals( "Backspace ")) {
String str=displayField.getText();
if(str.length()> 0)
displayField.setText(str.substring(0,str.length()-1));
}else if(input.equals( "CE ")||input.equals( "C ")) {
displayField.setText( "0 ");
start=true;
}else
displayField.setText(displayField.getText()+input);
}
}
}


private class CommandAction implements ActionListener {

public void actionPerformed(ActionEvent evt) {
String command=evt.getActionCommand();
if(start) {
lastCommand=command;
}else {
calculate(Double.parseDouble(displayField.getText()));
lastCommand=command;
start=true;
}
}
}

public void calculate(double x) {
if (lastCommand.equals( "+ ")) result+= x;
else if (lastCommand.equals( "- ")) result-=x;
else if (lastCommand.equals( "* ")) result*=x;
else if (lastCommand.equals( "/ ")) result/=x;
else if (lastCommand.equals( "= ")) result=x;
displayField.setText( " "+ result);
}

public static void main(String []args) {
Calculator calculator=new Calculator();
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

热点排行