读书人

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

发布时间: 2011-12-18 22:54:38 作者: rapoo

一个计算器的计算方法的问题
代码如下:
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);
}

}

读书人网 >J2SE开发

热点推荐