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()))); } } }
功能实现完善中,初学者还请多多指教-_-.