diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java new file mode 100644 index 0000000000000000000000000000000000000000..728f701066a48ed9efbb81ffc97f2b5409f76663 --- /dev/null +++ b/src/java2022spring/Calculator.java @@ -0,0 +1,197 @@ +package java2022spring; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.HeadlessException; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextField; + + +public class Calculator extends JFrame implements ActionListener { + + + private JPanel jp_north=new JPanel(); + private JTextField resultText=new JTextField("0"); + + + private JPanel jp_center=new JPanel(); + private final String[] temp= {"|x|","sqrt","1/x","x^2","C","BACK","%","/","7","8","9","*","4","5","6","-","1","2","3","+","+/-","0",".","=" + }; + private boolean firstDigit=true; + private double resultNum=0.0; + private String operator="="; + private boolean operateValidFlag=true; + + public Calculator() throws HeadlessException { + this.init(); + this.addNorthComponent(); + this.addCenterButton(); + } + + public void init() { + this.setTitle("计算器"); + this.setSize(300,450); + this.setLayout(new BorderLayout()); + this.setResizable(false); + this.setLocation(300,500); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + + + //添加北面的组件 + public void addNorthComponent() { + this.resultText.setPreferredSize(new Dimension(290,150)); + jp_north.add(resultText); + + this.add(jp_north,BorderLayout.NORTH); + } + + + //添加中间的组件 + public void addCenterButton() { + + String[] temp= {"|x|","sqrt","1/x","x^2","C","BACK","%","/","7","8","9","*","4","5","6","-","1","2","3","+","+/-","0",".","=" + }; + this.jp_center.setPreferredSize(new Dimension(299,250)); + this.jp_center.setLayout(new GridLayout(6,4,0,0)); + JButton [] btn=new JButton[24]; + for(int i=0;i=0) { + handleNumber(click); + } + else + handleOperator(click); + } + + private void handleC() { + resultText.setText("0"); + firstDigit=true; + operator="="; + } + + private void handleBack() { + String text=resultText.getText(); + int i=text.length(); + if(i>0) { + text=text.substring(0,i-1); + if(text.length()==0) { + resultText.setText("0"); + firstDigit=true; + operator="="; + } + else + resultText.setText(text); + } + + } + + private void handleNumber(String key) { + if(firstDigit) { + resultText.setText(key); + } + else if((key.equals(".")&&(resultText.getText()).indexOf(".")<0)) { + resultText.setText(resultText.getText()+"."); + } + else if(!key.equals(".")) { + resultText.setText(resultText.getText()+key); + } + firstDigit=false; + } + + private void handleOperator(String key) { + if(operator.equals("/")) { + if(getNumberFromText()==0.0) { + operateValidFlag=false; + resultText.setText("除数不能为零"); + } + else + resultNum/=getNumberFromText(); + } + else if(operator.equals("1/x")) { + if(resultNum==0.0) { + operateValidFlag=false; + resultText.setText("零没有倒数"); + } + else + resultNum=1/resultNum; + } + else if(operator.equals("+")) { + resultNum +=getNumberFromText(); + } + else if(operator.equals("-")) { + resultNum -=getNumberFromText(); + } + else if(operator.equals("*")) { + resultNum *=getNumberFromText(); + } + else if(operator.equals("|x|")) { + resultNum =Math.abs(resultNum); + } + else if(operator.equals("=")) { + resultNum =getNumberFromText(); + } + else if(operator.equals("%")) { + resultNum =getNumberFromText()/100; + } + if(operateValidFlag) { + long t1; + double t2; + t1=(long)resultNum; + t2=resultNum-t1; + if(t2==0) { + resultText.setText(String.valueOf(t1)); + } + else { + resultText.setText(String.valueOf(resultNum)); + } + } + operator=key; + firstDigit=true; + operateValidFlag=true; + + } + + private double getNumberFromText() { + double result=0; + try { + result=Double.valueOf(resultText.getText()).doubleValue(); + } + catch (NumberFormatException e) {} + return result; + } + public static void main(String[] args) { + Calculator calculator=new Calculator(); + calculator.setVisible(true); + } +}