diff --git a/src/java2020spring/Calculator.java b/src/java2020spring/Calculator.java new file mode 100644 index 0000000000000000000000000000000000000000..49b43f6fec767d2d08b44eee1218def160fa53e3 --- /dev/null +++ b/src/java2020spring/Calculator.java @@ -0,0 +1,423 @@ +package java2020spring; +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; + +public class Calculator extends JFrame implements ActionListener,ItemListener { + private static final long serialVersionUID = 1L; + Panel panel1; + JMenuBar menubar; + JMenu menu1,menu2,menu3; + JMenuItem menuitem1,menuitem2,menuitem3,menuitem4; + JTextField text; + String str,result,s3="=";String s1="0"; + boolean first=true,operation=true; + double number=0,n1,n2; + + public Calculator(){ + addmenu(); + panel1=new Panel(); + panel1.setLayout(null); + panel1.setBackground(Color.darkGray); + add(panel1,BorderLayout.CENTER); + addbutton(); + addtextfield(); + } + + + public void addmenu(){ + + menubar=new JMenuBar(); + menu1=new JMenu("编辑"); + menu2=new JMenu("查看"); + menu3=new JMenu("帮助"); + menuitem1=new JMenuItem("标准计算器"); + menuitem2=new JMenuItem("关闭窗口"); + menuitem3=new JMenuItem("说明"); + menuitem4=new JMenuItem("十进制"); + menu1.add(menuitem2); + menu2.add(menuitem1); + menu2.add(menuitem4); + menu3.add(menuitem3); + menubar.add(menu1); + menubar.add(menu2); + menubar.add(menu3); + setJMenuBar(menubar); + menu3.addItemListener(this); + menuitem2.addActionListener(this); + menuitem2.setActionCommand("关闭窗口"); + + } + + public void addbutton() { + + + JButton button0 = new JButton("0"); + button0.setBounds(80,410,70,70); + button0.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button0); + + JButton button_ = new JButton("+/-"); + button_.setBounds(150,410,70,70); + button_.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button_); + + JButton button_point = new JButton("."); + button_point.setBounds(220,410,70,70); + button_point.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button_point); + + JButton button_add = new JButton("+"); + button_add.setBounds(290,410,70,70); + button_add.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button_add); + + JButton button_equal = new JButton("="); + button_equal.setBounds(360,410,70,70); + button_equal.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button_equal); + + JButton M_=new JButton("M+"); + M_.setBounds(430,410,70,70); + M_.setFont(new Font("Black",Font.BOLD,20)); + panel1. add(M_); + + JButton button1 = new JButton("1"); + button1.setBounds(80,340,70,70); + button1.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button1); + button1.addActionListener(this); + button1.setActionCommand("1"); + + + JButton button2 = new JButton("2"); + button2.setBounds(150,340,70,70); + button2.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button2); + button2.setActionCommand("2"); + button2.addActionListener(this); + + JButton button3=new JButton("3"); + button3.setBounds(220,340,70,70); + button3.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button3); + + JButton button_min=new JButton("-"); + button_min.setBounds(290,340,70,70); + button_min.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button_min); + + JButton button_rec = new JButton("1/x"); + button_rec.setBounds(360,340,70,70); + button_rec.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button_rec); + + JButton MS=new JButton("MS"); + MS.setBounds(430,340,70,70); + MS.setFont(new Font("Black",Font.BOLD,20)); + panel1. add(MS); + + JButton button4=new JButton("4"); + button4.setBounds(80,270,70,70); + button4.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button4); + + JButton button5=new JButton("5"); + button5.setBounds(150,270,70,70); + button5.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button5); + + JButton button6=new JButton("6"); + button6.setBounds(220,270,70,70); + button6.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button6); + + JButton button_mul=new JButton("*"); + button_mul.setBounds(290,270,70,70); + button_mul.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button_mul); + + JButton button_per = new JButton("%"); + button_per.setBounds(360,270,70,70); + button_per.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button_per); + + JButton MR=new JButton("MR"); + MR.setBounds(430,270,70,70); + MR.setFont(new Font("Black",Font.BOLD,20)); + panel1. add(MR); + + JButton button7=new JButton("7"); + button7.setBounds(80,200,70,70); + button7.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button7); + + JButton button8=new JButton("8"); + button8.setBounds(150,200,70,70); + button8.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button8); + + JButton button9=new JButton("9"); + button9.setBounds(220,200,70,70); + button9.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button9); + + JButton button_div=new JButton("/"); + button_div.setBounds(290,200,70,70); + button_div.setFont(new Font("Black",Font.BOLD,20)); + panel1. add(button_div); + + JButton button_sqrt = new JButton("sqrt"); + button_sqrt.setBounds(360,200,70,70); + button_sqrt.setFont(new Font("Black",Font.BOLD,16)); + panel1.add(button_sqrt); + + JButton MC=new JButton("MC"); + MC.setBounds(430,200,70,70); + MC.setFont(new Font("Black",Font.BOLD,20)); + panel1. add(MC); + + JButton Backspace = new JButton("Backspace"); + Backspace.setBounds(80,145,110,50); + Backspace.setFont(new Font("Black",Font.BOLD,14)); + panel1.add(Backspace); + + JButton CE = new JButton("CE"); + CE.setBounds(200,145,110,50); + CE.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(CE); + + JButton C = new JButton("C"); + C.setBounds(320,145,110,50); + C.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(C); + + JButton button = new JButton("☻"); + button.setBounds(440,145,59,50); + button.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(button); + + JButton sin = new JButton("sin"); + sin.setBounds(80,480,140,50); + sin.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(sin); + + JButton cos = new JButton("cos"); + cos.setBounds(220,480,140,50); + cos.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(cos); + + JButton tan= new JButton("tan"); + tan.setBounds(360,480,140,50); + tan.setFont(new Font("Black",Font.BOLD,20)); + panel1.add(tan); + + + + + button3.setActionCommand("3"); + button3.addActionListener(this); + button4.setActionCommand("4"); + button4.addActionListener(this); + button5.setActionCommand("5"); + button5.addActionListener(this); + button6.setActionCommand("6"); + button6.addActionListener(this); + button7.setActionCommand("7"); + button7.addActionListener(this); + button8.setActionCommand("8"); + button8.addActionListener(this); + button9.setActionCommand("9"); + button9.addActionListener(this); + button0.setActionCommand("0"); + button0.addActionListener(this); + button_.setActionCommand("+/-"); + button_.addActionListener(this); + button_point.setActionCommand("."); + button_point.addActionListener(this); + button_add.setActionCommand("+"); + button_add.addActionListener(this); + button_min.setActionCommand("-"); + button_min.addActionListener(this); + button_mul.setActionCommand("*"); + button_mul.addActionListener(this); + button_div.setActionCommand("/"); + button_div.addActionListener(this); + button_sqrt.setActionCommand("sqrt"); + button_sqrt.addActionListener(this); + button_per.setActionCommand("%"); + button_per.addActionListener(this); + button_rec.setActionCommand("1/x"); + button_rec.addActionListener(this); + button_equal.setActionCommand("="); + button_equal.addActionListener(this); + Backspace.setActionCommand("Backspace"); + Backspace.addActionListener(this); + CE.setActionCommand("CE"); + CE.addActionListener(this); + C.setActionCommand("C"); + C.addActionListener(this); + MC.setActionCommand("MC"); + MC.addActionListener(this); + MR.setActionCommand("MR"); + MR.addActionListener(this); + MS.setActionCommand("MS"); + MS.addActionListener(this); + M_.setActionCommand("M+"); + M_.addActionListener(this); + sin.setActionCommand("sin"); + sin.addActionListener(this); + cos.setActionCommand("cos"); + cos.addActionListener(this); + tan.setActionCommand("tan"); + tan.addActionListener(this); + } + + public void addtextfield() { + text=new JTextField("0"); + text.setBounds(80, 25, 420, 90); //设置位置大小 + text.setEditable(false); //不可编辑 + text.setFont(new Font("Black",Font.BOLD,25)); //设置面板底色和字体大小 + text.setHorizontalAlignment(JTextField.RIGHT); //文本为右对齐 + text.setBorder(null); + panel1.add(text); + + } + + public void actionPerformed(ActionEvent e) { + + String str = e.getActionCommand(); + if(str.equals("0")||str.equals("1")||str.equals("2")||str.equals("3")||str.equals("4")||str.equals("5") + ||str.equals("6")||str.equals("7")||str.equals("8")||str.equals("9")||str.equals(".")) + Number(str); + else if(str.equals("CE")) + text.setText("0"); + else if(str.equals("C")) { + first=true; + s3="="; + text.setText("0");} + else if(str.equals("Backspace")) + Backspace_operation(); + else if(str.equals("MS")){ + s1=text.getText(); + text.setText("0");} + else if(str.equals("MC")) { + s1="0"; + text.setText("0");} + else if(str.equals("M+")) { + n1=Double.parseDouble(s1); + n2=Double.parseDouble(text.getText()); + int a=(int)(n1+n2); + if((n1+n2)>=0) { + int b=(int)(n1+n2+0.99); + if(a==b) + s1=String.valueOf(a); + else + s1=String.valueOf(n1+n2);} + else { + int b=(int)(n1+n2-0.99); + if(a==b) + s1=String.valueOf(a); + else + s1=String.valueOf(n1+n2);} + text.setText("0");} + else if(str.equals("MR")) + text.setText(s1); + else if(str.equals("关闭窗口")) + System.exit(0); + else Operation(str); + } + + + +public void Backspace_operation() { + String s1=text.getText(); + int n=s1.length(); + String s2=s1.substring(0,n-1); + if(n==1) { + text.setText("0"); + first=true; + s3="="; + } + else + text.setText(s2); + + } + + public void Number(String str) + {if(first==true) { + if(str.equals(".")) + text.setText("0"+str); + else + text.setText(str); + } + + else if((str.equals("."))&&(text.getText().indexOf(".")<0)) { + text.setText(text.getText()+"."); + } + else if(str.equals(".")==false) + {if(text.getText().equals("0")) + { if(str.equals("0")) + text.setText("0"); + else + text.setText(str);} + else + text.setText(text.getText()+str); + } + first=false; + + } + + + public void Operation(String str) { + switch(s3) { + case("+"):number += Double.parseDouble(text.getText());break; + case("-"):number -= Double.parseDouble(text.getText());break; + case("*"):number *= Double.parseDouble(text.getText());break; + case("sqrt"):number = Math.sqrt(number);break; + case("+/-"):number =(-1)*Double.parseDouble(text.getText());break; + case("%"):number *=100;break; + case("sin"):number =Math.sin(Double.parseDouble(text.getText()));break; + case("cos"):number =Math.cos(Double.parseDouble(text.getText()));break; + case("tan"):number =Math.tan(Double.parseDouble(text.getText()));break; + case("="):number= Double.parseDouble(text.getText());break;} + if(s3.equals("/")) { + if (Double.parseDouble(text.getText()) == 0.0) { + text.setText("ERROR"); } + else { + number /= Double.parseDouble(text.getText());} + } + else if (s3.equals("1/x")){ + if(number == 0.0) { + text.setText("ERROR");} + else{ + number = 1 / number;} + } + if(text.getText().equals("ERROR")==false){ + if(number>=0) { + int a=(int)number; + int b=(int)(number+0.99); + if(a==b) + text.setText(String.valueOf(a)); + else + text.setText(String.valueOf(number));} + else { + int a=(int)number; + int b=(int)(number-0.99); + if(a==b) + text.setText(String.valueOf(a)); + else + text.setText(String.valueOf(number));} } + + s3 = str; + first = true; + } + + + + public void itemStateChanged(ItemEvent e) { + JOptionPane.showMessageDialog(this, "该计算器可实现基本运算功能","说明",JOptionPane.INFORMATION_MESSAGE); + + } + +} \ No newline at end of file diff --git a/src/java2020spring/CalculatorMainClass.java b/src/java2020spring/CalculatorMainClass.java new file mode 100644 index 0000000000000000000000000000000000000000..5b667399e924a637668cb40e869f94d840466495 --- /dev/null +++ b/src/java2020spring/CalculatorMainClass.java @@ -0,0 +1,12 @@ +package java2020spring; +import javax.swing.JFrame; + +public class CalculatorMainClass { + public static void main(String[] args) { + Calculator calculator=new Calculator(); + calculator.setTitle("计算器"); + calculator.setBounds(100,100,600,600); + calculator.setVisible(true); + calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +}