java计算器(图型界面)

来源:互联网 发布:女生学数据库管理员 编辑:程序博客网 时间:2024/05/16 06:58

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;}}


1 0
原创粉丝点击