diff --git a/Mycalculator1 b/Mycalculator1 new file mode 100644 index 0000000000000000000000000000000000000000..9a52c9ed6de320bed56a1b8f2b8932c72fcd3e7c --- /dev/null +++ b/Mycalculator1 @@ -0,0 +1,210 @@ +package java2020spring; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.*; + + + +public class Mycalculator1 extends JFrame implements ActionListener{ + String num1[]= {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};//记录基本按钮的数组 + String m[]= {" ","MC","MR","MS","M+"}; + String key1[]= {"Backspace","CE","C"}; + JTextField text=new JTextField("0"); + JPanel numPanel,keyPanel,MPanel,textPanel,Panel; + JButton NUM1[]=new JButton[num1.length]; + JButton KEY1[]=new JButton[key1.length]; + JButton M[]=new JButton[m.length]; + boolean firstCheck=true; + double result=0.0; + String operate="="; + boolean operateFlag=true;//判断有没有操作错误 + void Mycalcultor() { + init(); + this.setResizable(false); + pack(); + } + //初始化计算器 + //设计计算器界面 + void init() { + //初始化键盘上的键位,放在一个面板上 + numPanel=new JPanel(); + keyPanel=new JPanel(); + MPanel=new JPanel(); + GridLayout grid1=new GridLayout(4,5,3,3); + numPanel.setLayout(grid1); + //初始化按钮,把按钮加到面板内,加装监听器 + for(int i=0;i0)) + numAct(label); + else + handleOperator(label); + + } + private void handleOperator(String key) { + if(operate.equals("/")) { + + // 如果当前结果文本框中的值等于0 + if(getNumberFromText() == 0.0) { + //操作不合法 + operateFlag = false; + text.setText("除数不能为零"); + } else { + result /= getNumberFromText(); + } + } else if (operate.equals("1/x")) { + + if (result == 0.0) { + // 操作不合法 + operateFlag = false; + text.setText("零没有倒数"); + } else { + result = 1 / result; + } + } else if (operate.equals("+")) { + + result += getNumberFromText(); + } else if (operate.equals("-")) { + + result -= getNumberFromText(); + } else if (operate.equals("*")) { + + result *= getNumberFromText(); + } else if (operate.equals("sqrt")) { + + result = Math.sqrt(result); + } else if (operate.equals("%")) { + + result = result%getNumberFromText(); + } else if (operate.equals("+/-")) { + + result = result * (-1); + } else if (operate.equals("=")) { + + result = getNumberFromText(); + } + if (operateFlag) { + // 双精度浮点数的运算 + long t1; + double t2; + t1 = (long) result; + t2 = result - t1; + if (t2 == 0) { + text.setText(String.valueOf(t1)); + } else { + text.setText(String.valueOf(result)); + } + } + // 运算符等于用户按的按钮 + operate = key; + firstCheck = true; + operateFlag = true; + } + + private void numAct(String key) { + if(firstCheck) { + //输入第一个数字 + text.setText(key); + } else if ((key.equals(".")) && (text.getText().indexOf(".") < 0)) { + + text.setText(text.getText() + "."); + } else if (!key.equals(".")) { + + text.setText(text.getText() + key); + } + // 以后输入的肯定不是第一个数字了 + firstCheck = false; + } + + private void clear(String label) { + // 初始化计算器的各种值 + text.setText("0"); + firstCheck = true; + operate = "="; + + } + + private void tuige(String label) { + String result = text.getText(); + int i =result.length(); + if(i>0) { + //退格,将文本最后一个字符去掉 + result=result.substring(0, i-1); + if(i==0) { + //如果文本框没有内容,则初始化计算器的各种值 + text.setText("0"); + firstCheck = true; + operate = "="; + }else { + //显示新的文本 + text.setText(result); + } + } + + } + + private double getNumberFromText() { + double number = 0; + try { + number = Double.valueOf(text.getText()).doubleValue();//字符串转化为数值 + } catch (NumberFormatException e) { + } + return number; + } + + public static void main(String args[]) { + Mycalculator1 calcultor1=new Mycalculator1(); + calcultor1.Mycalcultor(); + calcultor1.setTitle("标准计算器"); + calcultor1.setBounds(100,300,400,220); + calcultor1.setVisible(true); + calcultor1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +} \ No newline at end of file