diff --git a/src/java2022spring/MyComputer.java b/src/java2022spring/MyComputer.java new file mode 100644 index 0000000000000000000000000000000000000000..6b5cb9b0b9b1f847663f48e0897d1525b0799117 --- /dev/null +++ b/src/java2022spring/MyComputer.java @@ -0,0 +1,606 @@ +package java2022spring; +import java.awt.Color; +import java.awt.Container; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.UIManager; + +public class MyComputer extends JFrame implements ActionListener + { + JTextArea memoryArea=new JTextArea(" ",1,3); + JTextArea process=new JTextArea(" ",1,20); + JTextArea dispresult=new JTextArea("0. ",1,20); + Font font1=new Font("Arial Rounded MT Bold",Font.PLAIN,10 ); + Font font2=new Font("Arial Rounded MT Bold",Font.PLAIN,30 );//设置字号 + JButton[]jbuttons=new JButton[32]; + double result=0,first=0,second=0; + double memery=0; + char firstsymbol='\0',secondsymbol='\0'; + boolean p=true,r=true,dot=true; + private JMenu menu4; + JMenuItem CopyItem,StickupItem,HelpItem,LookItem,SixteenItem,TwoItem,TenItem,EightItem,AngleItem,RadianItem,GradientItem; + MyComputer() + { + super("Calculator"); + this.setTitle("我的课程设计-计算器"); + JMenuBar menubar=new JMenuBar();//创建菜单条 + JMenu menu1=new JMenu("查看(V)");//创建和设置菜单名 + JMenu menu2=new JMenu("编辑(E)");//创建和设置菜单名 + JMenu menu3=new JMenu("帮助(H)");//创建和设置菜单名 + JMenu menu4=new JMenu("转换模式"); + menubar.add(menu1);//将菜单加入到菜单条中 + menubar.add(menu2); + menubar.add(menu3); + menubar.add(menu4); + menu4.addActionListener(this); + CopyItem=new JMenuItem("复制"); + StickupItem=new JMenuItem("粘贴"); + HelpItem=new JMenuItem("查看帮助"); + LookItem=new JMenuItem("关于计算器"); + SixteenItem=new JMenuItem("十六进制 F5"); + TwoItem=new JMenuItem("二进制 F2"); + TenItem=new JMenuItem("十进制 F4"); + EightItem=new JMenuItem("八进制 F3"); + AngleItem=new JMenuItem("角度"); + RadianItem=new JMenuItem("弧度"); + GradientItem=new JMenuItem("梯度");//增加新的菜单条 + menu2.add(SixteenItem); + menu2.add(TenItem); + menu2.add(EightItem); + menu2.add(TwoItem); + menu2.add(AngleItem); + menu2.add(RadianItem); + menu2.add(GradientItem); + menu3.add(HelpItem); + menu3.add(LookItem); + menu1.add(CopyItem); + menu1.add(StickupItem);//添加菜单条 + this.setJMenuBar(menubar);//将设置好的菜单条放在窗口中 + try + { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch(Exception e) + { + System.out.println(e); + } + JPanel resultField=new JPanel(); + resultField.setLayout(new GridLayout(3,1)); + JPanel buttonField=new JPanel(); + Container all=getContentPane(); + GridLayout grid1; + grid1=new GridLayout(8,4,0,0); + memoryArea.setFont(font2); + dispresult.setFont(font2); + process.setFont(font1); + memoryArea.setEditable(false); + process.setEditable(false); + dispresult.setEditable(false); + resultField.add(memoryArea); + resultField.add(process); + resultField.add(dispresult); + + all.add(resultField,"North"); + String[]buttonname={"MS","MC","MR","M+","1/x","x2","√","㏒","%","sin","cos","tan","CE","C","back","÷","7","8","9","×","4","5","6","-","1","2","3","+","±","0",".","="}; + buttonField.setLayout(grid1); + for(int i=0;i<4;i++) + { + + for(int j=0;j<8;j++) + { + jbuttons[i*8+j]=new JButton(buttonname[i*8+j]); + jbuttons[i*8+j].addActionListener(this); + buttonField.add(jbuttons[i*8+j]); + } + all.add(buttonField,"Center"); + setSize(422,405); + setResizable(true); + setVisible(true);//设置可视 + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击X号可以关闭程序 + } + } + public void pressNumber(String n) + { + process.setText(process.getText()+n); + if(p) + { + dispresult.setText(n); + p=false; + } + else dispresult.append(n); + } + public boolean divide(double d) + { + if(d==0) + { + dispresult.setText("除数不能为0!"); + p=true; + r=true; + firstsymbol='\0'; + secondsymbol='\0'; + return true; + } + return false; + } + public void actionPerformed(ActionEvent e)//事件处理 + { + if(e.getSource()==menu4) + { + this.dispose();//点击按钮时销毁第一个页面,new一个 新的计算器页面 + new MyComputer2(); + } + Object source=e.getSource();//得到当前的按钮字符,后面进行匹配 + if(source==jbuttons[12]) + { + dispresult.setText("0."); + dot=true; + p=true; + r=true; + return; + } + + if(source==jbuttons[13])//处理C按键 + { + process.setText(null); + dispresult.setText("0."); + firstsymbol='\0'; + secondsymbol='\0'; + p=true; + r=true; + dot=true; + return; + } + if(source==jbuttons[14]){//处理back按键 + String text=process.getText(); + int i=text.length(); + if(i>0){ + text=text.substring(0,i-1);//指定读取对应数据 + if(text.length()==0){ + dispresult.setText("0."); + process.setText(""); + firstsymbol='\0'; + secondsymbol='\0'; + first=second=0; + p=true; + r=true; + dot=true; + } + else{ + dispresult.setText(text); + process.setText(text); + } + + } + } + if(source==jbuttons[1])//处理MS按键 + { + memery=0; + memoryArea.setText(" "); + p=true; + r=false; + dot=true; + return; + } + if(source==jbuttons[29])//处理0按键 + { + pressNumber("0"); + r=false; + return; + } + if(source==jbuttons[24])//处理1按键 + { + pressNumber("1"); + r=false; + return; + } + if(source==jbuttons[25])//处理2按键 + { + pressNumber("2"); + r=false; + return; + } + if(source==jbuttons[4])//处理倒数按键 + { + double temp=1/Double.parseDouble(dispresult.getText()); + dispresult.setText(String.valueOf(temp));//使结果转换为temp + p=true; + r=false; + dot=true; + return; + } + if(source==jbuttons[5])//处理平方按键 + { + double temp=Double.parseDouble(dispresult.getText())*Double.parseDouble(dispresult.getText()); + dispresult.setText(String.valueOf(temp)); + p=true; + r=false; + dot=true; + return; + } + if(source==jbuttons[6])//处理开方按键 + { + + if(-Double.parseDouble(dispresult.getText())<0){//设置开方条件 + double temp=Math.sqrt(Double.parseDouble(dispresult.getText())); + dispresult.setText(String.valueOf(temp)); + p=true; + r=false; + dot=true; + return; + }else{ + dispresult.setText("请输入有效数字"); + } + + } + if(source==jbuttons[7])//处理对数按键 + { + + if(-Double.parseDouble(dispresult.getText())<0){ + double temp=Math.log10(Double.parseDouble(dispresult.getText())); + dispresult.setText(String.valueOf(temp)); + p=true; + r=false; + dot=true; + return; + }else{ + dispresult.setText("请输入有效数字"); + } + + } + if(source==jbuttons[8])//处理除以100按键 + { + double temp=Double.parseDouble(dispresult.getText())/100; + dispresult.setText(String.valueOf(temp)); + p=true; + r=false; + dot=true; + return; + } + if(source==jbuttons[9])//处理sin函数 + { + double temp=Math.sin(Double.parseDouble(dispresult.getText())); + dispresult.setText(String.valueOf(temp)); + p=true; + r=false; + dot=true; + return; + } + if(source==jbuttons[10])//处理cos函数 + { + double temp=Math.cos(Double.parseDouble(dispresult.getText())); + dispresult.setText(String.valueOf(temp)); + p=true; + r=false; + dot=true; + return; + } + if(source==jbuttons[2])//处理MR按键 + { + if(memoryArea.getText().equals(" M ")) + dispresult.setText(String.valueOf(memery)); + p=true; + r=false; + dot=true; + return; + } + if(source==jbuttons[26])//处理按键3 + { + pressNumber("3"); + r=false; + return; + } + if(source==jbuttons[20])//处理按键4 + { + pressNumber("4"); + r=false; + return; + } + if(source==jbuttons[21])//处理按键5 + { + pressNumber("5"); + r=false; + return; + } + if(source==jbuttons[11])//处理tan函数 + { + double temp=Math.tan(Double.parseDouble(dispresult.getText())); + dispresult.setText(String.valueOf(temp)); + p=true; + r=false; + dot=true; + return; + } + if(source==jbuttons[0])//处理MS按键 + { + memery=Double.parseDouble(dispresult.getText()); + if(memery!=0)memoryArea.setText("M"); + p=true; + r=false; + dot=true; + return; + } + if(source==jbuttons[22])//处理按键6 + { + pressNumber("6"); + r=false; + return; + } + + + if(source==jbuttons[16])//处理按键7 + { pressNumber("7"); + r=false; + return; + } + if(source==jbuttons[17])//处理按键8 + { pressNumber("8"); + r=false; + return;} + if(source==jbuttons[28])//处理转换正负数 + { double temp=-Double.parseDouble(dispresult.getText()); + dispresult.setText(String.valueOf(temp)); + p=true; + r=false; + dot=true; + return;} + if(source==jbuttons[3])//处理按键M+ + { memery+=-Double.parseDouble(dispresult.getText()); + if(memery!=0) memoryArea.setText("M"); + p=true; + r=false; + dot=true; + return;} + if(source==jbuttons[18])//处理按键9 + { pressNumber("9"); + r=false; + return; + } + if(source==jbuttons[30])//处理小数点 + { if(dot){ + pressNumber("."); + dot=false; + r=false; + } + return; + } + if(source==jbuttons[31])//处理等于号 + { + second=Double.parseDouble(dispresult.getText()); + dot=true; + switch(secondsymbol) + { + case'*'://如果为乘号 + second*=first; + break; + case'/'://如果为除号 + if(divide(second)) return; + second=first/second; + } + secondsymbol='\0'; + switch(firstsymbol) + { + case'+': + result+=second; + break; + case'-': + result-=second; + break; + case'*': + result*=second; + dispresult.setText(String.valueOf(result)); + break; + case'/': + if(divide(second)) return; + result/=second; + } + if(firstsymbol!='\0') dispresult.setText(String.valueOf(result)); + firstsymbol='\0'; + p=true; + r=false; + return; + } + if(source==jbuttons[27])//处理加号 + { + process.setText(process.getText()+"+"); + dot=true; + if(r){ + firstsymbol='+'; + return; + + } + second=Double.parseDouble(dispresult.getText()); + switch(secondsymbol){ + case'*': + second*=first; + break; + case'/': + if(divide(second))return; + second=first/second; + } + secondsymbol='\0'; + switch(firstsymbol){ + case'\0': + result=second; + firstsymbol='+'; + break; + case'+': + result+=second; + dispresult.setText(String.valueOf(result)); + break; + case'-': + result-=second; + firstsymbol='+'; + dispresult.setText(String.valueOf(result)); + break; + case'*': + result*=second; + firstsymbol='+'; + dispresult.setText(String.valueOf(result)); + break; + case'/': + if(divide(second))return; + result/=second; + firstsymbol='+'; + dispresult.setText(String.valueOf(result)); + } + p=true; + r=true; + return; + } + if(source==jbuttons[23])//处理减号 + { + process.setText(process.getText()+"-"); + dot=true; + if(r){ + firstsymbol='-'; + return; + } + second=Double.parseDouble(dispresult.getText()); + switch(secondsymbol){ + case'*': + second*=first; + break; + case'/': + if(divide(second))return; + second=first/second; + + } + secondsymbol='\0'; + switch(firstsymbol){ + case'\0': + result=second; + firstsymbol='-'; + break; + case'+': + result=second; + firstsymbol='-'; + dispresult.setText(String.valueOf(result)); + break; + case'-': + result-=second; + dispresult.setText(String.valueOf(result)); + break; + case'*': + result*=second; + firstsymbol='-'; + dispresult.setText(String.valueOf(result)); + break; + case'/': + if(divide(second))return; + result/=second; + firstsymbol='-'; + dispresult.setText(String.valueOf(result)); + } + p=true; + r=true; + return; + } + if(source==jbuttons[19])//处理乘号 + { + process.setText(process.getText()+"*"); + dot=true; + if(r){ + if(secondsymbol=='\0')firstsymbol='*'; + else secondsymbol='*'; + return; + } + second=Double.parseDouble(dispresult.getText()); + switch(secondsymbol){ + case'\0': + switch(firstsymbol){ + case'\0': + firstsymbol='*'; + result=second; + break; + case'+': + case'-': + first=second; + secondsymbol='*'; + break; + case'*': + result*=second; + dispresult.setText(String.valueOf(result)); + break; + case'/': + if(divide(second))return; + result/=second; + dispresult.setText(String.valueOf(result)); + firstsymbol='*'; + } + break; + case'*': + first*=second; + dispresult.setText(String.valueOf(first)); + break; + case'/': + if(divide(second))return; + first/=second; + secondsymbol='*'; + dispresult.setText(String.valueOf(first)); + } + p=true; + r=true; + return; + } + if(source==jbuttons[15])//处理除号 + { + process.setText(process.getText()+"/"); + dot=true; + if(r){ + if(secondsymbol=='\0')firstsymbol='/'; + else secondsymbol='/'; + return; + } + second=Double.parseDouble(dispresult.getText()); + switch(secondsymbol){ + case'\0': + switch(firstsymbol){ + case'\0': + firstsymbol='/'; + result=second; + break; + case'+': + case'-': + first=second; + secondsymbol='/'; + break; + case'*': + result*=second; + firstsymbol='/'; + dispresult.setText(String.valueOf(result)); + break; + case'/': + if(divide(second))return; + result/=second; + dispresult.setText(String.valueOf(result)); + } + break; + case'*': + first*=second; + secondsymbol='/'; + dispresult.setText(String.valueOf(first)); + break; + case'/': + if(divide(second))return; + first/=second; + dispresult.setText(String.valueOf(first)); + } + p=true; + r=true; + return; + } + } + public static void main(String args[]) + { + MyComputer mc=new MyComputer(); + } + } + diff --git a/src/java2022spring/MyComputer2.java b/src/java2022spring/MyComputer2.java new file mode 100644 index 0000000000000000000000000000000000000000..ee49fcd30eb0fc2a5e8c91c499e553cb12758378 --- /dev/null +++ b/src/java2022spring/MyComputer2.java @@ -0,0 +1,270 @@ +package java2022spring; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class MyComputer2{ + public static void main(String[] args) { + JS win=new JS(); + } +} +class JS extends JFrame implements ActionListener{ + private StringBuilder sBuilder = new StringBuilder(); //利用StringBuilder类来显示,以及区分两个操作数 + JTextArea text=new JTextArea(); + double a,b; + Double sum; + int i; + private JMenu menu4; + JMenuItem CopyItem,StickupItem,HelpItem,LookItem,SixteenItem,TwoItem,TenItem,EightItem,AngleItem,RadianItem,GradientItem;//设置初值 + public JS() + { + setBounds(100,100,400,400); + setTitle("计算器"); + JMenuBar menubar=new JMenuBar();//创建菜单条 + JMenu menu1=new JMenu("查看(V)");//创建和设置菜单名 + JMenu menu2=new JMenu("编辑(E)");//创建和设置菜单名 + JMenu menu3=new JMenu("帮助(H)");//创建和设置菜单名 + JMenu menu4=new JMenu("转换模式"); + menubar.add(menu1);//将菜单加入到菜单条中 + menubar.add(menu2); + menubar.add(menu3); + menubar.add(menu4); + menu4.addActionListener(this); + CopyItem=new JMenuItem("复制"); + StickupItem=new JMenuItem("粘贴"); + HelpItem=new JMenuItem("查看帮助"); + LookItem=new JMenuItem("关于计算器"); + SixteenItem=new JMenuItem("十六进制 F5"); + TwoItem=new JMenuItem("二进制 F2"); + TenItem=new JMenuItem("十进制 F4"); + EightItem=new JMenuItem("八进制 F3"); + AngleItem=new JMenuItem("角度"); + RadianItem=new JMenuItem("弧度"); + GradientItem=new JMenuItem("梯度");//增加新的菜单条 + menu2.add(SixteenItem); + menu2.add(TenItem); + menu2.add(EightItem); + menu2.add(TwoItem); + menu2.add(AngleItem); + menu2.add(RadianItem); + menu2.add(GradientItem); + menu3.add(HelpItem); + menu3.add(LookItem); + menu1.add(CopyItem); + menu1.add(StickupItem);//添加菜单条 + this.setJMenuBar(menubar);//将设置好的菜单条放在窗口中 + this.setLayout(new BorderLayout());//添加文本框 + JPanel p1=new JPanel(); + JPanel p2=new JPanel(); + text.setPreferredSize(new Dimension (370,60));//设置组件大小 + p2.setLayout(new FlowLayout()); + p1.add(text); + this.add(p1,BorderLayout.NORTH); + p2.setLayout(new GridLayout(5,4)); //添加按钮 + JButton button[]=new JButton[20]; + button[0]=new JButton("C"); //清空 + button[1]=new JButton("CE"); //清除之前输入的一个数据 + button[2]=new JButton("%"); //取余 + button[3]=new JButton("÷"); //除法 + button[4]=new JButton("7"); + button[5]=new JButton("8"); + button[6]=new JButton("9"); + button[7]=new JButton("x"); //乘号 + button[8]=new JButton("4"); + button[9]=new JButton("5"); + button[10]=new JButton("6"); + button[11]=new JButton("—"); //减号 + button[12]=new JButton("1"); + button[13]=new JButton("2"); + button[14]=new JButton("3"); + button[15]=new JButton("+"); //加号 + button[16]=new JButton("e"); //乘方 + button[17]=new JButton("0"); + button[18]=new JButton("."); //小数点 + button[19]=new JButton("="); //等于 + + for(int i=0;i