diff --git a/src/java2022spring/Standard.java b/src/java2022spring/Standard.java new file mode 100644 index 0000000000000000000000000000000000000000..cfe862be563158c9b81019e09abccd3f9b403741 --- /dev/null +++ b/src/java2022spring/Standard.java @@ -0,0 +1,230 @@ +package java2022spring; +import java.awt.*; +import java.awt.event.*; + +import javax.swing.*; +public class Standard extends JFrame implements ActionListener{ + JTextField input; + JPanel panel; + double num1,num2; //num1、num2分别为计算器读取的计算数值 + String result=""; //input文本框输出的结果 + String operator=""; //运算符 + double memory; //存储的数值 + + Standard(String s){ + setTitle(s); + + panel=new JPanel(); + panel.setLayout(new BorderLayout()); + input =new JTextField(); + input.setEditable(false); //设置文本框为不可编辑 + input.setHorizontalAlignment(JTextField.RIGHT); //设置文本靠右 + input.setFont(new Font("黑体",Font.PLAIN,30)); //设置字体类型大小 + add(input,BorderLayout.NORTH); + + //创建按钮 + JButton percent=new JButton("%"); + JButton clear=new JButton("CE"); + JButton clearAll=new JButton("C"); + JButton backspace=new JButton("←"); + JButton down=new JButton("1/x"); + JButton squ=new JButton("x²"); + JButton sqrt=new JButton("√"); + JButton div=new JButton("÷"); + JButton sev=new JButton("7"); + JButton eig=new JButton("8"); + JButton nin=new JButton("9"); + JButton mul=new JButton("×"); + JButton fou=new JButton("4"); + JButton fiv=new JButton("5"); + JButton six=new JButton("6"); + JButton sub=new JButton("-"); + JButton one=new JButton("1"); + JButton two=new JButton("2"); + JButton thr=new JButton("3"); + JButton add=new JButton("+"); + JButton neg=new JButton("+/-"); + JButton zeo=new JButton("0"); + JButton poi=new JButton("."); + JButton eql=new JButton("="); + JButton m1=new JButton("MC"); + JButton m2=new JButton("MR"); + JButton m3=new JButton("M+"); + JButton m4=new JButton("M-"); + JButton m5=new JButton("MS"); + + //注册监视器 + clear.addActionListener(this); + percent.addActionListener(this); + clearAll.addActionListener(this); + backspace.addActionListener(this); + down.addActionListener(this); + squ.addActionListener(this); + sqrt.addActionListener(this); + div.addActionListener(this); + sev.addActionListener(this); + eig.addActionListener(this); + nin.addActionListener(this); + mul.addActionListener(this); + fou.addActionListener(this); + fiv.addActionListener(this); + six.addActionListener(this); + sub.addActionListener(this); + one.addActionListener(this); + two.addActionListener(this); + thr.addActionListener(this); + add.addActionListener(this); + neg.addActionListener(this); + zeo.addActionListener(this); + poi.addActionListener(this); + eql.addActionListener(this); + m1.addActionListener(this); + m2.addActionListener(this); + m3.addActionListener(this); + m4.addActionListener(this); + m5.addActionListener(this); + + //将按钮添加进面板 + JPanel centerP=new JPanel(); + centerP.add(percent); + centerP.add(clear); + centerP.add(clearAll); + centerP.add(backspace); + centerP.add(down); + centerP.add(squ); + centerP.add(sqrt); + centerP.add(div); + centerP.add(sev); + centerP.add(eig); + centerP.add(nin); + centerP.add(mul); + centerP.add(fou); + centerP.add(fiv); + centerP.add(six); + centerP.add(sub); + centerP.add(one); + centerP.add(two); + centerP.add(thr); + centerP.add(add); + centerP.add(neg); + centerP.add(zeo); + centerP.add(poi); + centerP.add(eql); + centerP.setLayout(new GridLayout(6,4,3,3)); + + JPanel northP=new JPanel(); + northP.add(m1); + northP.add(m2); + northP.add(m3); + northP.add(m4); + northP.add(m5); + northP.setLayout(new GridLayout(1,5,3,3)); + + JPanel panelC=new JPanel(); + panelC.setLayout(new BorderLayout()); + panelC.add(northP,BorderLayout.NORTH); + panelC.add(centerP,BorderLayout.CENTER); + add(panelC,BorderLayout.CENTER); + + } + +public void actionPerformed(ActionEvent e) { + String command=e.getActionCommand(); + try { + caculate(command); //调用计算函数 + }catch(Exception ee) { + System.out.println(ee.getMessage()); + } + +} + +//计算函数 +public void caculate(String command) throws Exception{ + switch (command) { + case"+": //加减乘除按钮功能 + case"-": + case"×": + case"÷": + operator = command; + num1=Double.parseDouble(result); + result=""; + input.setText(input.getText()+result);break; + case"=": //等号功能 + num2=Double.parseDouble(result); + switch (operator){ + case"+": + result=Double.toString(num1+num2);break; + case"-": + result=Double.toString(num1-num2);break; + case"×": + result=Double.toString(num1*num2);break; + case"÷": + result=Double.toString(num1/num2);break; + } + input.setText(result);break; + case"+/-": //取相反数 + double neg=Double.parseDouble(result); + if(neg<0){ + neg=Math.abs(neg); + } else if(neg>=0){ + neg=0-Math.abs(neg); + } + result=Double.toString(neg); + input.setText(result);break; + case"x²": //求平方 + double squ=Double.parseDouble(result); + result=Double.toString(Math.pow(squ, 2)); + input.setText(result);break; + case"√": //求开方 + double sqrt=Double.parseDouble(result); + result=Double.toString(Math.sqrt(sqrt)); + input.setText(result);break; + case"%": //求百分数 + double percent=(Double.parseDouble(result))/100; + result=Double.toString(percent); + input.setText(result);break; + case"1/x": //求倒数 + double down=1/(Double.parseDouble(result)); + result=Double.toString(down); + input.setText(result);break; + //以下为计算器功能键 + case"C": + num1=0; + num2=0; + result=""; + input.setText(result);break; + case"CE": + result=""; + input.setText(result);break; + case"←": + int backspace=result.length(); + if(backspace==1){ + result=""; + } else { + result=result.substring (0,backspace-1); + } + input.setText(result);break; + case"MC": + this.memory=0;result=""; + input.setText(result);break; + case"MR": + result=Double.toString(this.memory); + input.setText(result);break; + case"MS": + this.memory=Double.parseDouble(result); + result=""; + input.setText(result);break; + case"M+": + double m3=(Double.parseDouble(result)+this.memory); + result=Double.toString(m3); + input.setText(result);break; + case"M-": + double m4 = (Double.parseDouble(result)-this.memory); + result = Double.toString(m4); + input.setText(result);break; + default: + result+=command; + input.setText(result);break; + } + } +} diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java index 24deb29bfc0e5f50fdedcd21b504e77b529d48b6..48e4917151b8cfbd1f710b414cb1f63792277b68 100644 --- a/src/java2022spring/Test.java +++ b/src/java2022spring/Test.java @@ -1,7 +1,11 @@ package java2022spring; - +import javax.swing.*; public class Test { public static void main(String[] args) { - System.out.println("Hello world!"); + Standard calculator =new Standard(""); + calculator.setBounds(200,200,360,360); + calculator.setVisible(true); + calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } }