首页 > 代码库 > 仿windows的java计算器

仿windows的java计算器

import java.awt.*;import javax.swing.*;import java.awt.event.*;public class Calculator extends JFrame implements ActionListener{        private static final long serialVersionUID = 1L;    private JButton[] btn;    private String[] labels = {"MC","MR","MS","M+","M-",            "←","CE","C","±","√",            "7","8","9","/","%",            "4","5","6","*","1/x",            "1","2","3","-","=",            "0",".","+"};    private double d1 = 0.0, d2 = 0.0;     private String opt = "操作符";    private JTextArea result = new JTextArea("0",3,20);        public Calculator(String title)    {        super(title);        this.setVisible(true);        this.setBounds(400, 300, 200, 350);        result.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);        addMenu();        btn = new JButton[28];        for(int i=0;i<btn.length;i++)        {            btn[i] = new JButton(labels[i]);        }                        this.add(result, BorderLayout.NORTH);        Panel p = new Panel();        p.setLayout(new GridLayout(3,1));        Panel p1 = new Panel();        p1.setLayout(new GridLayout(2,5,2,2));        for(int i=0;i<10;i++)        {            p1.add(btn[i]);        }        Panel p2 = new Panel();        p2.setLayout(new GridLayout(2,5,2,2));        for(int i=10;i<20;i++)        {            p2.add(btn[i]);        }        Panel p3 = new Panel();        GridBagLayout gridbag = new GridBagLayout();        GridBagConstraints c = new GridBagConstraints();        p3.setLayout(gridbag);        c.fill = GridBagConstraints.BOTH;        c.insets = new Insets(1,1,0,0);                c.weightx = 1.0;        addButton(p3,btn[20],gridbag,c);        addButton(p3,btn[21],gridbag,c);        addButton(p3,btn[22],gridbag,c);        addButton(p3,btn[23],gridbag,c);                c.gridwidth =GridBagConstraints.REMAINDER;        c.gridheight=2;        addButton(p3,btn[24],gridbag,c);                //0        c.gridx = 0;        c.gridwidth=2;        c.gridheight=1;        addButton(p3,btn[25],gridbag,c);                c.gridx=2;        c.gridwidth=1;        c.gridheight=1;        addButton(p3,btn[26],gridbag,c);        //+        c.gridx=3;        c.gridwidth=1;        c.gridheight=1;        addButton(p3,btn[27],gridbag,c);                        p.add(p1);        p.add(p2);        p.add(p3);        this.add(p,BorderLayout.CENTER);                this.pack();        this.setResizable(false);                //for(int i=0;i<28;i++)        //    System.out.println("btn["+i+"]: "+btn[i].getActionCommand());        for(int i=0;i<28;i++)            btn[i].addActionListener(this);                //关闭窗口        this.addWindowListener(new WindowAdapter(){            public void windowClosing(WindowEvent e)             {                System.exit(0);            }        });     }        public void addMenu()    {            JMenuBar mb = new JMenuBar();        //查看        JMenu viewMenu = new JMenu("查看(V)");        viewMenu.setMnemonic(‘V‘);        JMenuItem stardardItem = new JMenuItem("标准型");        JMenuItem scienceItem = new JMenuItem("科学型");        JMenuItem digitalItem = new JMenuItem("数字统计");        JMenuItem basicItem = new JMenuItem("基本");                //编辑        JMenu editMenu = new JMenu("编辑(E)");        editMenu.setMnemonic(‘E‘);        final JMenuItem copyItem = new JMenuItem("复制(C)");            copyItem.setAccelerator(KeyStroke.getKeyStroke(‘C‘,InputEvent.CTRL_MASK));        copyItem.setMnemonic(‘C‘);        copyItem.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e)            {                result.selectAll();                result.copy();            }        });                final JMenuItem pasteItem = new JMenuItem("粘贴(V)");        pasteItem.setAccelerator(KeyStroke.getKeyStroke(‘V‘,InputEvent.CTRL_MASK));        pasteItem.setMnemonic(‘V‘);        pasteItem.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e)            {                result.paste();            }        });                final JMenuItem cutItem = new JMenuItem("剪切(X)");        cutItem.setAccelerator(KeyStroke.getKeyStroke(‘X‘,InputEvent.CTRL_MASK));        cutItem.setMnemonic(‘X‘);        cutItem.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e)            {                result.selectAll();                result.cut();            }        });                //帮助        JMenu helpMenu = new JMenu("帮助(H)");        helpMenu.setMnemonic(‘H‘);        JMenuItem viewHelpItem = new JMenuItem("查看帮助");        JMenuItem aboutItem = new JMenuItem("关于计算器");                //添加菜单项        viewMenu.add(stardardItem);        viewMenu.add(scienceItem);        viewMenu.addSeparator();        viewMenu.add(digitalItem);        viewMenu.addSeparator();        viewMenu.add(basicItem);                editMenu.add(copyItem);        editMenu.add(pasteItem);        editMenu.add(cutItem);                helpMenu.add(viewHelpItem);        helpMenu.addSeparator();        helpMenu.add(aboutItem);                //添加菜单        mb.add(viewMenu);        mb.add(editMenu);        mb.add(helpMenu);            final JPopupMenu pm = new JPopupMenu();        pm.add(copyItem);        pm.add(pasteItem);        pm.add(cutItem);        result.addMouseListener(new MouseAdapter()        {                        public void mouseReleased(MouseEvent e)            {                                    if(e.isPopupTrigger())                    pm.show(result,e.getX(),e.getY());                        }        });            result.add(pm);        this.setJMenuBar(mb);        }        public void addButton(Panel p,JButton btn,GridBagLayout g, GridBagConstraints c)    {        g.setConstraints(btn, c);        p.add(btn);    }        public static void main(String[] args) {        new Calculator("Java 计算器");            }        @Override    public void actionPerformed(ActionEvent e) {        Object t = e.getSource();        try{            //0-9的数字按钮            for(int i=25;i<26;i++)                if(t.equals(btn[i]))                    result.setText(result.getText()+(i-25));//0                    for(int i=20;i<23;i++)                if(t.equals(btn[i]))                    result.setText(result.getText()+(i-19));//1 2 3                    for(int i=15;i<18;i++)                if(t.equals(btn[i]))                    result.setText(result.getText()+(i-11));//4 5 6                    for(int i=10;i<13;i++)                if(t.equals(btn[i]))                    result.setText(result.getText()+(i-3));// 7 8 9                    //加法+            if(t.equals(btn[27]))            {                d1 = Double.parseDouble(result.getText());                    System.out.println(d1);                    opt = "+";                }                        //减法-            if(t.equals(btn[23]))            {                d1 = Double.parseDouble(result.getText());                System.out.println(d1);                opt = "-";                        }                        //乘法*            if(t.equals(btn[18]))            {                d1 = Double.parseDouble(result.getText());                System.out.println(d1);                result.setText("");                opt = "*";                        }                        //除法/            if(t.equals(btn[13]))            {                d1 = Double.parseDouble(result.getText());                System.out.println(d1);                opt = "/";            }            //取模             if(t.equals(btn[14]))            {                d1 = Double.parseDouble(result.getText());                System.out.println(d1);                opt = "%";            }                //四则运算、取模结果            if(t.equals(btn[24]))            {                    d2 = Double.parseDouble(result.getText());                System.out.println(d2);                //result.setText("");                if(opt.equals("+"))                    result.setText(""+(d1+d2));                else if(opt.equals("-"))                    result.setText(""+(d1-d2));                else if(opt.equals("*"))                    result.setText(""+(d1*d2));                else if(opt.equals("/"))                {                    if(d2 == 0)                        result.setText("除数不能为0");                    else                        result.setText(""+(d1/d2));                    }                else if(opt.equals("%"))                    result.setText(""+(d1%d2));                                }            //求导            if(t.equals(btn[19]))            {                d1 = Double.parseDouble(result.getText());                System.out.println(d1);                opt = "1/x";                if(opt.equals("1/x"))                    result.setText(""+(1/d1));            }            //开方            if(t.equals(btn[9]))            {                d1 = Double.parseDouble(result.getText());                System.out.println(d1);                opt = "√";                if(opt.equals("√"))                {                    if(d1 > 0)                        result.setText(""+Math.sqrt(d1));                        else                        result.setText("负数没有平方根");                }            }            //CE  or  C            if(t.equals(btn[6]) || t.equals(btn[7]))            {                result.setText("");            }            //            if(t.equals(btn[5]))            {                String s = result.getText();                result.setText(s.substring(0,s.length()-1));            }            //±            if(t.equals(btn[8]))            {                d1 = Double.parseDouble(result.getText());                result.setText(""+(-d1));                        }            //.            if(t.equals(btn[26]))            {                if(result.getText().trim().indexOf(".") != -1) //判断字符串中是否已经包含了小数点                {                 }                 else //如果没有小数点                 {                            if(result.getText().trim().equals("0"))//如果开始为0                    {                        result.setText(("0"+e.getActionCommand()).toString());                    }                    else if(result.getText().trim().equals(""))//如果初时显示为空                    {                                }                    else                    {                        result.setText((result.getText()+e.getActionCommand()).toString());                    }                }            }        }catch(Exception ee){}                                         }}

运行结果:

 

ps:由于能力有限,第一行的按钮功能没有实现,关于菜单的地方还有一点不足之处。。。。。。哪位大神给我修改下?谢谢