java计算器实现

界面如下:实现加减乘除,取余,开方,N次幂,退格,连续操作,清零功能,

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculator6 extends JFrame implements ActionListener
{
JFrame frame =new JFrame();
JPanel panel =new JPanel();
JTextField textField =new JTextField(40);
private final String[] KEYS = { "7", "8", "9", "4", "5", "6","1", "2", "3","0","+", "-","*", "/", "%", "清零","+/-", ".", "sqrt", "^","=","BACKSPACE","二进制","十六进制" ,"log-e","sin","cos","tan"};
private JButton keys[] = new JButton[KEYS.length];
private boolean firstDigit =false;
private double resultNum ;
int j=0;
char temp;
String s0;
String s1;
String s3;
public Calculator6()
{
for (int i = 0; i < KEYS.length; i++) 
{
System.out.println(i+"---------"+KEYS[i]);

}
//JButton button=new JButton("BACKSPACE");
textField.setEditable(false);
setResizable(false);
setLayout(new BorderLayout());
panel.add(textField);
JPanel calckeysPanel = new JPanel(); 
calckeysPanel.setLayout(new GridLayout(7,3 , 3, 3)); 
for (int i = 0; i < KEYS.length; i++) 
{ 
keys[i] = new JButton(KEYS[i]); 
keys[i].addActionListener(this);
calckeysPanel.add(keys[i]); 
keys[i].setForeground(Color.blue);

}
//calckeysPanel.add(button);
//button.addActionListener(this);

add(calckeysPanel,BorderLayout.CENTER);
add(panel,BorderLayout.NORTH);
setTitle("计算器");
setVisible(true);
setSize(300, 200);
pack();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}

public static void main(String[] args) 
{
new Calculator6();
}

@Override
public void actionPerformed(ActionEvent e) 
{
// TODO Auto-generated method stub
for (int i = 0; i <=9; i++) 
{
if(e.getSource()==keys[i])
{

textField.setText(textField.getText()+KEYS[i]); 
if (firstDigit==false) 
{    
s0=textField.getText();
}
else
{
s1=textField.getText();
}

}
}    
if(e.getSource()==keys[10])
{
//s0=textField.getText();
firstDigit=true;
textField.setText("");
temp='+';
}
if(e.getSource()==keys[11])
{
//s0=textField.getText();
firstDigit=true;
textField.setText("");
temp='-';
}
if(e.getSource()==keys[12])
{
//s0=textField.getText();
firstDigit=true;
textField.setText("");
temp='*';
}
if(e.getSource()==keys[13])
{
//s0=textField.getText();
firstDigit=true;
textField.setText("");
temp='/';
}
if(e.getSource()==keys[14])
{
//s0=textField.getText();
firstDigit=true;
textField.setText("");
temp='%';
}
if(e.getSource()==keys[15])
{
firstDigit=false;
s0="";
s1="";
textField.setText("");
}
if(e.getSource()==keys[17])
{
if (firstDigit==false) 
{    
textField.setText(textField.getText()+".");    
}
else
{
textField.setText(textField.getText()+".");
}
}
if(e.getSource()==keys[18])
{
firstDigit=true;
//s0=textField.getText();
//textField.setText("sqrt");    
textField.setText("");
temp='s';
}
if(e.getSource()==keys[19])
{
firstDigit=true;
//s0=textField.getText();
textField.setText("");
temp='^';
}
if(e.getSource()==keys[20])
{
if (firstDigit==true) 
{
switch (temp) 
{
case '+':
resultNum=Double.parseDouble(s0)+Double.parseDouble(s1);
break;
case '-':
resultNum=Double.parseDouble(s0)-Double.parseDouble(s1);
break;
case '*':
resultNum=Double.parseDouble(s0)*Double.parseDouble(s1);
break;
case '/':
if(s1.equals("0"))
{
textField.setText("error");
}
else 
{
resultNum=Double.parseDouble(s0)/Double.parseDouble(s1);
}
break;
case '%':
resultNum=Double.parseDouble(s0)%Double.parseDouble(s1);
break;
case 's':
resultNum=Math.sqrt(Double.parseDouble(s0));
break;
case '^':
resultNum=Math.pow(Double.parseDouble(s0),Double.parseDouble(s1));
default:
break;
}
//resultNum=(double)Math.round(resultNum*1000)/1000;
textField.setText(""+resultNum);    
}
}
if(e.getSource()==keys[21])
{
int i=textField.getText().length();
if(i>0)
{
textField.setText(textField.getText().substring(0,i-1));
}
if(i==0)
{
textField.setText("");
}
}
if(e.getSource()==keys[22])
{
textField.setText(Integer.toBinaryString((int)Double.parseDouble(textField.getText())));
}
if(e.getSource()==keys[23])
{
textField.setText(Integer.toHexString((int)Double.parseDouble(textField.getText())));
}
if(e.getSource()==keys[25])
{
textField.setText(""+Math.sin(Double.parseDouble(textField.getText())));
}
if(e.getSource()==keys[24])
{
textField.setText(""+Math.log(Double.parseDouble(textField.getText())));
}
if(e.getSource()==keys[26])
{
textField.setText(""+Math.cos(Double.parseDouble(textField.getText())));
}
if(e.getSource()==keys[27])
{
textField.setText(""+Math.tan(Double.parseDouble(textField.getText())));
}

}

}

 

功能实现完善中,初学者还请多多指教-_-.

posted @ 2016-11-28 20:29  WillingTong  阅读(609)  评论(0编辑  收藏  举报