⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.java

📁 一个Java写的计算器程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//计算器  
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
public class Calculator { 
    String st[]=new String[2]; 
    boolean isDot=false,isE=false; 
    double num[]={0,0}; 
    int flag=0; 
    int state=-1; 
    JMenuBar mb=new JMenuBar(); 
    JMenu []m=new JMenu[4]; 
    JMenuItem m1=new JMenuItem("退出"); 
    JMenuItem m2[]=new JMenuItem[2]; 
    JMenu m3[]=new JMenu[5]; 
    JMenuItem mi3[][]=new JMenuItem[5][5]; 
    JMenuItem m4=new JMenuItem("关于..."); 
    JButton b1[]=new JButton[10]; 
    JButton b2[]=new JButton[5]; 
    JButton b4[]=new JButton[3]; 
    JButton b3[]=new JButton[5]; 
    JPanel p1=new JPanel(); 
    JPanel p2=new JPanel(); 
    JPanel p[]=new JPanel[3]; 
    JTextField t=new JTextField("0.",20); 
    JFrame f=new JFrame("计算器v0.9            by DOU"); 
    public Calculator() { 
        for(int i=0;i<3;i++) 
            p[i]=new JPanel(); 
        for(int i=0;i<10;i++) 
            b1[i]=new JButton(" "+Integer.toString(i)+" "); 
        b2[0]=new JButton(" + "); 
        b2[1]=new JButton(" - "); 
        b2[2]=new JButton(" * "); 
        b2[3]=new JButton(" / "); 
        b2[4]=new JButton(" = "); 
        b3[0]=new JButton("+/-"); 
        b3[1]=new JButton(" . "); 
        b3[2]=new JButton("sqrt"); 
        b3[3]=new JButton("1/x"); 
        b3[4]=new JButton(" % "); 
        b4[0]=new JButton("Backspace"); 
        b4[1]=new JButton("CE"); 
        b4[2]=new JButton("C"); 
    } 
    protected void Menu(){ 
        String []str={"文件(F)","编辑(E)","常数(C)","帮助(H)"}; 
        char []ca={'F','E','C','H'}; 
        char []ca1={'C','V'}; 
        for(int i=0;i<4;i++){ 
            m[i]=new JMenu(str[i]); 
            m[i].setMnemonic(ca[i]); 
            mb.add(m[i]); 
        } 
        String []str1={"复制","粘贴"}; 
        for(int i=0;i<2;i++){ 
            m2[i]=new JMenuItem(str1[i]); 
            m2[i].addActionListener(new menuAction()); 
            m2[i].setMnemonic(ca1[i]); 
            m2[i].setAccelerator(KeyStroke.getKeyStroke(ca1[i],java.awt.Event.CTRL_MASK,false)); 
            m[1].add(m2[i]); 
        } 
        String []str2={"数学","电磁学","原子和核物理","热力学","万有引力"}; 
        String [][]str3={{"π","欧拉常数e","黄金比例"},{"光速","元电荷e","真空阻抗"},{"普朗克常数"},{"玻尔兹曼常数","原子质量单位","摩尔气体常数","阿伏伽德罗数"},{"万有引力常数G","重力加速度g"}}; 
        for(int i=0;i<5;i++){ 
            m3[i]=new JMenu(str2[i]); 
            for(int j=0;j<5;j++){ 
                try{ 
                    mi3[i][j]=new JMenuItem(str3[i][j]); 
                    mi3[i][j].addActionListener(new menuAction()); 
                    m3[i].add(mi3[i][j]);
                }catch(ArrayIndexOutOfBoundsException e){ 
                    break; 
                } 
            } 
            m[2].add(m3[i]); 
        } 
  
        m1.setMnemonic('Q'); 
        m1.setAccelerator(KeyStroke.getKeyStroke('Q',java.awt.Event.CTRL_MASK,false)); 
        m1.addActionListener(new menuAction()); 
        m[0].add(m1); 
        m[3].add(m4); 
    } 
    protected void Action(){ 
        for(int i=0;i<10;i++) 
            b1[i].addActionListener(new numAction()); 
        for(int i=0;i<5;i++) 
            b2[i].addActionListener(new calAction()); 
        for(int i=0;i<5;i++) 
            b3[i].addActionListener(new speAction()); 
        for(int i=0;i<3;i++) 
            b4[i].addActionListener(new speAction()); 
        for(int i=0;i<3;i++) 
            p[i].addKeyListener(new keyhandle()); 
            p1.addKeyListener(new keyhandle()); 
            p2.addKeyListener(new keyhandle()); 
            f.addKeyListener(new keyhandle()); 
    } 
    public void go(){ 
        st[0]="";st[1]=""; 
        t.setFocusable(false); 
        p1.setLayout(new FlowLayout()); 
        p1.add(t); 
        p[0].setLayout(new FlowLayout()); 
        for(int i=0;i<3;i++) 
            p[0].add(b4[i]); 
        t.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
        p[1].applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
        p[1].setLayout(new GridLayout(4,3,3,3)); 
        for(int i=9;i>=0;i--) 
            p[1].add(b1[i]); 
        p[1].add(b3[1]);p[1].add(b3[0]);p[1].add(b1[0]); 
        p[2].setLayout(new GridLayout(4,2,3,3)); 
        p[2].add(b2[3]);p[2].add(b3[2]);p[2].add(b2[2]);p[2].add(b3[4]);p[2].add(b2[1]);p[2].add(b3[3]);p[2].add(b2[0]);p[2].add(b2[4]); 
        p2.setLayout(new BorderLayout(3,3)); 
        p2.add(p[0],BorderLayout.NORTH); 
        p2.add(p[1],BorderLayout.CENTER); 
        p2.add(p[2],BorderLayout.EAST); 
        Action(); 
        Menu(); 
        f.setJMenuBar(mb); 
        f.setLayout(new BorderLayout(3,3)); 
        f.add(p1,BorderLayout.NORTH); 
        f.add(p2,BorderLayout.CENTER); 
        f.pack(); 
        f.addWindowListener(new WindowAdapter(){ 
            public void windowClosing(WindowEvent e){ 
                System.exit(0); 
            } 
        }); 
        p1.requestFocus(); 
        f.setResizable(false); 
        f.setVisible(true); 
    } 
    class calAction implements ActionListener{ 
        public void actionPerformed(ActionEvent e){ 
            p1.requestFocus(); 
            flag=1; 
            isDot=false; 
            if(st[0]==""){ 
                Toolkit.getDefaultToolkit().beep(); 
            } else{ 
                if(st[1]!=""&&e.getSource()!=b2[4]){ 
                    calculation(state); 
                }   
                for(int i=0;i<4;i++){ 
                    if(e.getSource()==b2[i]){ 
                        isE=false; 
                        state=i; 
                        break; 
                    } 
                } 
                if(e.getSource()==b2[4]){ 
                    calculation(state); 
                    isE=true; 
                } 
            } 
        } 
    } 
    class numAction implements ActionListener{ 

        public void actionPerformed(ActionEvent e){  
            p1.requestFocus(); 
            for(int i=0;i<10;i++){ 
                if(e.getSource()==b1[i]){ 
                    addStr(i); 
                    break; 
                } 
            } 
        } 
    } 
    class speAction implements ActionListener{ 
  
        public void actionPerformed(ActionEvent e){ 
            p1.requestFocus(); 
            if(e.getSource()==b4[2]) 
                reset(); 
            if(e.getSource()==b4[0]) 
                backspace(); 
            if(e.getSource()==b4[1]) 
                JOptionPane.showMessageDialog(null,"不知这按钮跟\"C\"按钮有什么区别,所以不做事件");  
            if(e.getSource()==b3[1]) 
                dot(); 
            else{ 
                for(int i=0;i<5;i++){ 
                    if(e.getSource()==b3[i]){ 
                        changeNum(i); 
                        break; 
                    } 
                } 
            } 
       } 

       public void changeNum(int a){ 
           if(a==0){ 
               if(st[1]!=""){ 
                   isE=true; 
                   num[1]=num[1]*-1; 
                   st[1]=String.valueOf(num[1]); 
                   t.setText(st[1]);
               }else { 
                   if(st[0]==""){ 
                      Toolkit.getDefaultToolkit().beep(); 
                   }else{ 
                       isE=true; 
                       num[0]=num[0]*-1; 
                       st[0]=String.valueOf(num[0]); 
                       t.setText(st[0]); 
                   } 
               } 
           } 
           if(a==2){ 
     
               if(st[1]!=""){ 
                   if(num[1]>=0){ 
                       isE=true; 
                       num[1]=Math.sqrt(num[1]); 
                       st[1]=String.valueOf(num[1]); 
                       t.setText(st[1]);
                   }else Toolkit.getDefaultToolkit().beep(); 
               }else { 
                   if(st[0]==""){ 
                       Toolkit.getDefaultToolkit().beep(); 
                   }else{ 
                       if(num[0]>=0){ 
                           isE=true; 
                           num[0]=Math.sqrt(num[0]); 
                           st[0]=String.valueOf(num[0]); 
                           t.setText(st[0]);
                       }else 
                           Toolkit.getDefaultToolkit().beep(); 
                       }
                   } 
               } 
               if(a==3){ 
                   if(st[1]!=""){ 
                       if(num[1]!=0){ 
                           isE=true; 
                           num[1]=1/num[1]; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -