diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java new file mode 100644 index 0000000000000000000000000000000000000000..9a7e8b6cb84d639ebb8d2306250fe2d43a87f4e6 --- /dev/null +++ b/src/java2022spring/Calculator.java @@ -0,0 +1,7 @@ +package java2022spring; +public class Calculator { + public static void main (String[] args) { + ComputerFrame win =new ComputerFrame("姜美茜的计算器",200,50,550,500); + + } +} \ No newline at end of file diff --git a/src/java2022spring/ComputerFrame.java b/src/java2022spring/ComputerFrame.java new file mode 100644 index 0000000000000000000000000000000000000000..33561de14d9fef4c3bafd8ab6fff370248802d03 --- /dev/null +++ b/src/java2022spring/ComputerFrame.java @@ -0,0 +1,458 @@ +package java2022spring; +import java.awt.*; +import javax.swing.*; +import java.lang.String; +import javax.swing.border.LineBorder; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +public class ComputerFrame extends JFrame implements ActionListener{ + JPanel mianban;//面板 + + JPanel keyBoard=new JPanel(); + JTextArea TextArea;//文本区 + JButton[][]button=new JButton[5][5];//按钮 + ActionListener listener;//监视器 + String str1="",str2="",str3=""; + int flag = 0;// flag指示变量,判断按"="前按的是哪个按键 + double result, a, b; + + + +ComputerFrame(){}//布局 + public ComputerFrame(String s,int x,int y,int w,int h) + { + init(s); + setLocation(x,y); + setSize(w,h); + setVisible(true); + setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//自动隐藏并释放该窗体 + validate();//验证 + } + void init(String s) { + setTitle(s); + setLayout(new BorderLayout(5,5)); + LineBorder border = new LineBorder(Color.LIGHT_GRAY, 6, true); + TextArea=new JTextArea(2,5);//文本区 + TextArea.setFont(new Font("黑体",Font.BOLD,30));//设计字体显示效果 + TextArea.setBorder(BorderFactory.createLoweredBevelBorder());//设置边框 + TextArea.add(new JLabel("线边框")); + String [][] str= {//依次插入 + {"C","CE","%","|x|","mod"}, + {"7","8","9","÷","^2"}, + {"4","5","6","*","1/x"}, + {"1","2","3","+","√"}, + {"back","0",".","-","="} + + }; + mianban=new JPanel(); + mianban.setLayout(new BorderLayout());//布局 + keyBoard.setLayout(new GridLayout(5,5));//布局 + for(int i=0;i<5;i++) { + for(int j=0;j<5;j++) { + button[i][j]=new JButton(str[i][j]); + button[i][j].setFont(new Font("黑体",Font.BOLD,30)); + keyBoard.add(button[i][j]);//把符号放入面板中 + button[i][j].addActionListener( this );//设置监视器 + + } + } + + mianban.add(TextArea,BorderLayout.NORTH);//面板设计 + mianban.add(keyBoard,BorderLayout.CENTER);//面板设计 + add(mianban); + + + } + + + + @Override + public void actionPerformed(ActionEvent e) {//事件处理 + + String str1=e.getActionCommand();//str1为被单击的按钮 + + if(str1.equals("0"))//判断 + { + str2+=0; + TextArea.setText(str2); + } + else if(str1.equals("1")) + { + str2+=1; + TextArea.setText(str2); + } + else if(str1.equals("2")) + { + str2+=2; + TextArea.setText(str2); + } + else if(str1.equals("3")) + { + str2+=3; + TextArea.setText(str2); + } + else if(str1.equals("4")) + { + str2+=4; + TextArea.setText(str2); + } + else if(str1.equals("5")) + { + str2+=5; + TextArea.setText(str2); + } + else if(str1.equals("6")) + { + str2+=6; + TextArea.setText(str2); + } + else if(str1.equals("7")) + { + str2+=7; + TextArea.setText(str2); + } + else if(str1.equals("8")) + { + str2+=8; + TextArea.setText(str2); + } + else if(str1.equals("9")) + { + str2+=9; + TextArea.setText(str2); + } + else if(str1.equals(".")) + { + str2+="."; + TextArea.setText(str2); + }//以上完成了1-9和.操作 + + if(str1.equals("+")&&str3==""){ + if(!str2.equals("")){//加号前不等于空 + str3=str2; + str2=""; + TextArea.setText("+"); + flag=1; + } + else{TextArea.setText("错误,请按C键后重新输入");} + + } + if((flag==1)&&str1.equals("=")){//按完加号之后按等于号 + + a=Double.parseDouble(str2); //换精度 + b=Double.parseDouble(str3); + result=a+b; + str2=""+result; + TextArea.setText(str2); + flag=0;} + //加法完成 + + if(str1.equals("-")&&str3=="") + if(!str2.equals("")){ + str3=str2; + + TextArea.setText("-"); + str2=""; + flag=3; + } + else{str2+="-";//减号也可以是负数运算 + TextArea.setText(str2); + } + + if((flag==3)&&str1.equals("=")){//按完减号之后按等于号 + a=Double.parseDouble(str2); //换精度 + b=Double.parseDouble(str3); + result=b-a; + str2=""+result; + TextArea.setText(str2); + flag=0; + }//减法完成 + if(str1.equals("*")&&str3==""){ + if(!str2.equals("")){//乘号前不等于空 + str3=str2; + str2=""; + TextArea.setText("*"); + flag=4; + } + else{TextArea.setText("错误,请按C键后重新输入"); + } + } + if((flag==4)&&str1.equals("=")){//按完加号之后按等于号 + a=Double.parseDouble(str2); //换精度 + b=Double.parseDouble(str3); + result=a*b; + str2=""+result; + TextArea.setText(str2); + flag=0; + }//乘法完成 + if(str1.equals("÷")&&str3==""){ + if(!str2.equals("")){//除号前不等于空 + str3=str2; + str2=""; + TextArea.setText("÷"); + flag=5; + } + else{TextArea.setText("错误,请按C键后重新输入"); + } + } + if((flag==5)&&str1.equals("=")){//按完除号之后按等于号 + a=Double.parseDouble(str2); //换精度 + b=Double.parseDouble(str3); + result=b/a; + str2=""+result; + TextArea.setText(str2); + flag=0; + }//除法完成 + if(str1.equals("^2")&&str3==""){ + if(!str2.equals("")){//平方前不等于空 + str3=str2;//相等 + TextArea.setText("^2"); + flag=6; + } + else{TextArea.setText("错误,请按C键后重新输入"); + } + } + if((flag==6)&&str1.equals("=")){//按完平方之后按等于号 + a=Double.parseDouble(str2); //换精度 + b=Double.parseDouble(str3); + result=b*a; + str2=""+result; + TextArea.setText(str2); + flag=0; + }//平方完成 + + + + if(str1.equals("√")&&str2==""){//根号前不能有值 + TextArea.setText("√"); + flag=7; + } + if((flag==7)&&str1.equals("=")){ + a=Double.parseDouble(str2); + if(a>=0){//根号内必须大于0 + result=Math.sqrt(a); + str2=""+result; + TextArea.setText(str2); + TextArea.setVisible(true); + } + else{ + TextArea.setText("错误,请按C键后重新输入"); + } + }//开根号完成 + + + if(str1.equals("1/x")&&str3=="") + { + if(!str2.equals(""))//倒数前不等于空 + {TextArea.setText("1/x"); + flag=8; } + else + {TextArea.setText("错误,请按C键后重新输入");} + } + if((flag==8)&&str1.equals("=")){//按完倒数之后按等于号 + a=Double.parseDouble(str2); + result=1/a; + str2=""+result; + TextArea.setText(str2); + TextArea.setVisible(true); + }//倒数完成 + + + + + if(str1.equals("%")&&str3==""){ + if(!str2.equals("")){ + + TextArea.setText("%"); + flag=9;} + else{TextArea.setText("错误,请按C键后重新输入"); + }} + + if(flag==9&&str1.equals("=")) + {a=Double.parseDouble(str2); + result=a/100; + str2=""+result; + TextArea.setText(str2); + TextArea.setVisible(true); + flag=0; + }//百分号完成 + + if(str1.equals("|x|")&&str2!=""){//绝对值之前不能没有值 + + TextArea.setText("|x|"); + flag=10; + } + if((flag==10)){//不用按等于号就可以实现 &&str1.equals("=") + a=Double.parseDouble(str2); + if(a>=0){ + result=a; + str2=""+result; + TextArea.setText(str2); + TextArea.setVisible(true); + } + else{ + result=a*(-1); + str2=""+result; + TextArea.setText(str2); + TextArea.setVisible(true); + } + }//绝对值完成 + if(str1.equals("mod")&&str3==""){ + if(!str2.equals("")){//除号前不等于空 + str3=str2; + str2=""; + TextArea.setText("mod"); + flag=11;} + else {TextArea.setText("错误,请按C键后重新输入"); + }} + if(flag==11&&str1.equals("=")){ + a=Double.parseDouble(str2); + b=Double.parseDouble(str3); + result=b%a; + str2=result+""; + TextArea.setText(str2); + flag=0; + + }//取余完成 + if(str1.equals("CE")){ + if(str3==""&&flag==0){//str2刚赋值 + str2=""; + TextArea.setText(""); + } + if(str3!=""&&str2==""){//str3已赋值 + str3=""; + TextArea.setText(""); + } + if(str3!=""&&str2!=""){//已计算 + str2=""; + TextArea.setText(""); + } + }//CE完成 + + + + //不能在运算符号处用ce,会导致str2数据同时清除 + if(str1.equals("C"))//全部初始化 + { str1=""; + str2=""; + str3=""; + a=0; + b=0; + flag=0; + result=0; + TextArea.setText(str2); + }//C键清除完成 + + + + if(str1.equals("back")){ + if(str2.length()==0){ + str2=""; + } + else{ + char []num=TextArea.getText().toCharArray(); + TextArea.setText(String.valueOf(num,0,TextArea.getText().length()-1)); + str2=TextArea.getText(); + } + }//backspace完成 + + + + + if(str2!=""&&str3!=""&&str1.equals("+")){//连续运算之加法 + a=Double.parseDouble(str2); + b=Double.parseDouble(str3); + switch(flag){ + case 1: + result=a+b; + break; + case 3: + result=b-a; + break; + case 4: + result=a*b; + break; + case 5: + result=b/a; + break; + } + str2=""+result; + TextArea.setText(str2); + str3=str2; + str2=""; + flag=1; + } + if(str2!=""&&str3!=""&&str1.equals("-")){//连续运算之减法 + a=Double.parseDouble(str2); + b=Double.parseDouble(str3); + switch(flag){ + case 1: + result=a+b; + break; + case 3: + result=b-a; + break; + case 4: + result=a*b; + break; + case 5: + result=b/a; + break; + } + str2=""+result; + TextArea.setText(str2); + str3=str2; + str2=""; + flag=3; + } + if(str2!=""&&str3!=""&&str1.equals("*")){//连续运算之乘法 + a=Double.parseDouble(str2); + b=Double.parseDouble(str3); + switch(flag){ + case 1: + result=a+b; + break; + case 3: + result=b-a; + break; + case 4: + result=a*b; + break; + case 5: + result=b/a; + break; + } + str2=""+result; + TextArea.setText(str2); + str3=str2; + str2=""; + flag=4; + } + if(str1!=""&&str2!=""&&str1.equals("÷")){//连续运算之除法 + a=Double.parseDouble(str2); + b=Double.parseDouble(str3); + switch(flag){ + case 1: + result=a+b; + break; + case 3: + result=b-a; + break; + case 4: + result=a*b; + break; + case 5: + result=b/a; + break; + } + str2=""+result; + TextArea.setText(str2); + str3=str2; + str2=""; + flag=5; + }//以上计算机内容全部完成 + + } + + } \ No newline at end of file diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java index 24deb29bfc0e5f50fdedcd21b504e77b529d48b6..f86f4011ca242b81b3b32f55931fc5d971846df1 100644 --- a/src/java2022spring/Test.java +++ b/src/java2022spring/Test.java @@ -1,7 +1,13 @@ package java2022spring; +import java.awt.BorderLayout; +import java.awt.Font; + +import javax.swing.JButton; +import javax.swing.JPanel; + public class Test { public static void main(String[] args) { System.out.println("Hello world!"); } -} +} \ No newline at end of file