package xjj;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Calculator extends JFrame implements ActionListener{
private JTextField text;
private BigDecimal bigDecimal_a,bigDecimal_b,bigDecimal_result;
private boolean isFirst=true,isPoint=true,isEqual=false;
private String str;
private int operator;
private JButton[] jbtns=new JButton[21];
private String[] buttonName={"",
"±","C","←","÷",
"7","8","9","×",
"4","5","6","+",
"1","2","3","-" ,
"0",".","=",""};
public Calculator(){
super("计算器");
Dimension dim=this.getToolkit().getScreenSize();
this.getContentPane().setLayout(null);
//this.getContentPane().setBackground(Color.CYAN);
this.setBounds(dim.width*2/5, dim.height/4, dim.width/4, dim.height/2);
this.setResizable(false);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
text=new JTextField(20);
text.setBounds(new Rectangle(5, 3, 325, 40));
text.setHorizontalAlignment(JTextField.RIGHT);
text.setBackground(Color.CYAN);
this.getContentPane().add(text);
int count=1;
for(int i=1;i<20;i++){
jbtns[i]=new JButton();
jbtns[i] = new JButton(buttonName[i]);
jbtns[i].addActionListener(this);
this.getContentPane().add(jbtns[i]);
int k=i%4;
if(i%4==0){
k=4;
jbtns[i].setBounds(5+(k-1)*85, 60*count, 70, 42);
count++;
}else{
jbtns[i].setBounds(5+(k-1)*85, 60*count, 70, 42);
}
}
jbtns[19].setBounds(5+2*85, 300, 155, 42);
text.setFont(new Font("xjj",Font.BOLD,20));
this.setVisible(true);
}
public static void main(String[] args) {
new Calculator();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jbtns[19]){
str=text.getText();
if(!haveSign(str) && !isEqual){
return ;
}
int i=calculator();
if(i==0){
return ;
}
isEqual=true;
isFirst=true;
text.setText(""+bigDecimal_result);
}
if(e.getSource()==jbtns[18] && isPoint ){
isAddPoint();
String s=str.substring(0,str.length()-1);
if(havePoint(s)){
return ;
}
isEqual=false;
isPoint=false;
text.setText(str);
}
if(e.getSource()==jbtns[1]){
str=text.getText();
if(str.length()==0){
str="-";
text.setText(str);
return ;
}
if(str.charAt(str.length()-1)=='-'||str.charAt(str.length()-1)=='+'||str.charAt(str.length()-1)=='×'||str.charAt(str.length()-1)=='÷'){
str=str+"-";
text.setText(str);
return ;
}
}
if(e.getSource()==jbtns[3]&& !isEqual){
str=text.getText();
if(str.length()==0){
return ;
}
if(str.length()==1){
str="";
}
if(str.length()>=2){
if(str.charAt(str.length()-1)=='÷' || str.charAt(str.length()-1)=='×' ||str.charAt(str.length()-1)=='+' ||str.charAt(str.length()-1)=='-'){
isFirst=true;
}
str=str.substring(0, str.length()-1);
if(havePoint(str)){
isPoint=false;
}else{
isPoint=true;
}
}
text.setText(str);
return ;
}
if(e.getSource()==jbtns[2]){
str="";
isFirst=true;isPoint=true;isEqual=false;
text.setText(str);
return ;
}
JButton jbtn=(JButton)e.getSource();
if(jbtn.getText().compareTo("0")>=0 && jbtn.getText().compareTo("9") <=0){
str=text.getText()+jbtn.getText();
isEqual=false;
text.setText(str);
}
for(int i=4;i<=16;i+=4){
if(e.getSource()==jbtns[i]&&isFirst){
str=text.getText();
if(str.length()==0){
return ;
}
isEqual=false;
operator=i;
str=text.getText()+jbtns[i].getText();
isFirst=false;
isPoint=true;
text.setText(str);
}
}
}
private int calculator() {
str=text.getText();
if(operator==4){
String[] string=str.split("÷");
if(string.length==1){
bigDecimal_result=bigDecimal_result.divide(bigDecimal_b,5,BigDecimal.ROUND_HALF_UP);
bigDecimal_result=bigDecimal_result.stripTrailingZeros();
return 1;
}
bigDecimal_a=new BigDecimal(string[0]);
bigDecimal_b=new BigDecimal(string[1]);
if(bigDecimal_b.compareTo(BigDecimal.ZERO)==0){
return 0;
}
bigDecimal_result=bigDecimal_a.divide(bigDecimal_b,20,BigDecimal.ROUND_HALF_UP);
bigDecimal_result=bigDecimal_result.stripTrailingZeros();
}
if(operator==8){
String[] string=str.split("×");
if(string.length==1){
bigDecimal_result=bigDecimal_result.multiply(bigDecimal_b);
bigDecimal_result=bigDecimal_result.stripTrailingZeros();
return 1;
}
bigDecimal_a=new BigDecimal(string[0]);
bigDecimal_b=new BigDecimal(string[1]);
bigDecimal_result=bigDecimal_a.multiply(bigDecimal_b);
bigDecimal_result=bigDecimal_result.stripTrailingZeros();
}
if(operator==12){
String[] string=str.split("+");
if(string.length==1){
bigDecimal_result=bigDecimal_result.add(bigDecimal_b);
bigDecimal_result=bigDecimal_result.stripTrailingZeros();
return 1;
}
bigDecimal_a=new BigDecimal(string[0]);
bigDecimal_b=new BigDecimal(string[1]);
bigDecimal_result=bigDecimal_a.add(bigDecimal_b);
bigDecimal_result=bigDecimal_result.stripTrailingZeros();
}
if(operator==16){
String[] string=str.split("-");
if(string.length==1){
bigDecimal_result=bigDecimal_result.subtract(bigDecimal_b);
bigDecimal_result=bigDecimal_result.stripTrailingZeros();
return 1;
}
bigDecimal_a=new BigDecimal(string[0]);
bigDecimal_b=new BigDecimal(string[1]);
bigDecimal_result=bigDecimal_a.subtract(bigDecimal_b);
bigDecimal_result=bigDecimal_result.stripTrailingZeros();
}
return 1;
}
public void isAddPoint(){
str=text.getText();
if(str.length()==0){
str="0.";
return ;
}
if(str.charAt(str.length()-1)>'9'||str.charAt(str.length()-1)<'0'){
str=str+"0.";
return ;
}
str=text.getText()+".";
}
public boolean haveSign(String s){
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='+' || s.charAt(i)=='-' ||s.charAt(i)=='÷' ||s.charAt(i)=='×'){
return true;
}
}
return false;
}
public boolean havePoint(String s){
int count=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='.' ){
count++;
}
}
if(count==1 && haveSign(s)){
return false;
}
if(count==0 ){
return false;
}
return true;
}
}
java计算器(图型界面)

最新推荐文章于 2022-04-26 09:10:19 发布
