java计算器

import java.awt.*;              //引入抽象窗体工具包
import javax.swing.*;           //引入图形用户界面的包
import java.awt.event.*;

//面板布局类
class calculatorFrame extends JFrame implements ActionListener  //自定义一个布局框架类calculatorFrame继承JFrame
{
        Container cp;
        JPanel pnl[] = new JPanel[3];           //定义一个主面板作为这个窗体的容器面板
        JTextField text;                        //定义一个文本域
        double num[]={0, 0};                    //定义两个变量用于存储数值
        int index=0;                            //用于指定访问num[0]或num[1]
        char sign;                              //运算符
        
        String s[]={    "toDegrees","toRadians","Backapace","Clear",
                        "7","8","9","/","sqrt",
                        "4","5","6","*","%",
                        "1","2","3","-","1/x",
                        "0","+/-",".","+","=",
                        "sin","cos","tan","cot","HEX"},

        toolTip[]={     "角度->弧度","弧度->角度","删除字符","清空",
                        "除","开方","乘","求余数","减","求倒数","正负变换","加","等于",
                        "正弦","余弦","正切","余切","转化16进制"};
        int tipSite[]={ 0,1,2,3,
                        7,8,12,13,17,18,20,22,23,
                        24,25,26,27,28};

        JButton b[] = new JButton[29];
        

        calculatorFrame()
        {       
                setTitle("计算器-1042157148");     //设置窗体的标题
                setSize(400, 220);              //设置窗体的大小
                setLocation(200, 200);          //设置窗体的显示位置
                cp=getContentPane();

                //将pnl[i]添加到容器cp中,按"North","Center","South"布局
                String str[]={"North","Center","South"};
                for(int i=0; i<3; i++)
                {       pnl[i] = new JPanel();
                        cp.add(pnl[i],str[i]);
                }

                pnl[0].setLayout(new GridLayout(1,6));
                pnl[1].setLayout(new GridLayout(1,4));
                pnl[2].setLayout(new GridLayout(5,5));

                text = new JTextField(25);
                text.setText("");
                text.setHorizontalAlignment(JTextField.RIGHT);  //文本右对齐
                text.setEditable(false);                        //文本域不可编辑
                text.setBackground(new Color(255, 255, 255));   //设置背景色

                //向pnl[i]中添加按钮
                pnl[0].add(text);
                for(int i=0; i<29; i++)
                {
                        b[i] = new JButton(s[i]);
                        if(i<=3)pnl[1].add(b[i]);
                        else pnl[2].add(b[i]);

                        b[i].addActionListener(this);           //添加按钮事件监听

                        //设置以下按钮前景色为红色
                        if(i<=3 || i%5==2 || i==23)b[i].setForeground(new Color(255,0,0));
                }

                for(int i=0; i<toolTip.length; i++)
                {
                        b[tipSite[i]].setToolTipText(toolTip[i]);//为按钮添加提示信息
                }


                setVisible(true);                               //显示窗体
                setDefaultCloseOperation(EXIT_ON_CLOSE);        //退出程序时关闭窗体     
        }

        public void actionPerformed(ActionEvent e)              //事件响应
        {
                Object tmp = e.getSource();                     //获取事件源
                String str = text.getText();

                if(tmp==b[2] && str.length()>0) str=str.substring(0, str.length()-1);//退格键
                else if(tmp==b[3]){ str=""; index=0; num[0]=0; num[1]=0;}//清空键

                //字符输入
                if(tmp==b[4] || tmp==b[5] || tmp==b[6] || tmp==b[9] || tmp==b[10] || tmp==b[11] || 
                        tmp==b[14] || tmp==b[15] || tmp==b[16] || tmp==b[19] || tmp==b[21])
                {
                        if(tmp==b[4]) str += '7';
                        else if(tmp==b[5]) str += '8';
                        else if(tmp==b[6]) str += '9';

                        else if(tmp==b[9]) str += '4';
                        else if(tmp==b[10]) str += '5';
                        else if(tmp==b[11]) str += '6';

                        else if(tmp==b[14]) str += '1';
                        else if(tmp==b[15]) str += '2';
                        else if(tmp==b[16]) str += '3';

                        else if(tmp==b[19]) str += '0';
                        else if(tmp==b[21]) if(str.indexOf('.') == -1) str += '.';      //有一个小数点时不再添加
                
                        if(index==0) num[0] = Double.parseDouble(str);                  //将输入的字符串转化成数值并存储在num中
                        else num[1] = Double.parseDouble(str);
                }

                //运算符设置
                else if(tmp==b[7] || tmp==b[12] || tmp==b[13] || tmp==b[17] || tmp==b[22])
                {
                        if(tmp==b[7]) sign='/';
                        else if(tmp==b[12]) sign='*';
                        else if(tmp==b[13]) sign='%';
                        else if(tmp==b[17]) sign='-';
                        else if(tmp==b[22]) sign='+';

                        index=1;
                        str="";
                }

                else if(tmp==b[23])                     //" == "输出运算结果
                {
                        if(sign=='/' || sign=='*' || sign=='%' || sign=='-' || sign=='+')
                        {
                                if(sign=='/'){ num[0]/=num[1];}
                                else if(sign=='*'){ num[0]*=num[1];}
                                else if(sign=='%'){ num[0]%=num[1];}
                                else if(sign=='-'){ num[0]-=num[1];}
                                else if(sign=='+'){ num[0]+=num[1];}

                                index=0; 
                                num[1]=0;                       //清除num[1]中的数值
                                str=Double.toString(num[index]);
                        }
                }

                //单目运算
                if(tmp==b[0] || tmp==b[1] || tmp==b[8] || tmp==b[18] || tmp==b[20] || tmp==b[24] || 
                        tmp==b[25] || tmp==b[26] || tmp==b[27])
                {
                        if(tmp==b[0]) num[index]=java.lang.Math.toDegrees(num[index]);  //弧度->角度
                        if(tmp==b[1]) num[index]=java.lang.Math.toRadians(num[index]);  //角度->弧度
                        if(tmp==b[8]) if(num[index]>=0) num[index]=java.lang.Math.sqrt(num[index]);
                        if(tmp==b[18]) num[index]=1/num[index];                         //求倒数
                        if(tmp==b[20]) num[index]=-num[index];                          //正负变换
                        if(tmp==b[24]) num[index]=java.lang.Math.sin(num[index]);       //正弦
                        if(tmp==b[25]) num[index]=java.lang.Math.cos(num[index]);
                        if(tmp==b[26]) num[index]=java.lang.Math.tan(num[index]);
                        if(tmp==b[27]) num[index]=1/java.lang.Math.tan(num[index]);

                        str=Double.toString(num[index]);                //更新str
                }
                
                if(tmp==b[28])                                          //将num[index]转化成16进制的字符串
                {
                        int num1=(int)num[index], num2=0, sign=0;
                        char tmpC;
                        str="";
                        if(num1<0){ num1=-num1; sign=1;}                //转换为正数
                        while(num1!=0)
                        {
                                num2=num1%16;
                                if(num2>9)tmpC=(char)('A'+num2-10);
                                else tmpC=(char)('0'+num2);

                                str=tmpC+str;
                                num1/=16;
                        }
                        if(sign==1)str='-'+str;                         //是负数时str添加负号
                }

                text.setText(str);                                      //更新文本框中的显示内容
        }


        public static void main(String[] args) 
        {
                new calculatorFrame();                                  //创建一个布局窗体
        }
}

简单的计算器 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MyCalculator extends Frame implements ActionListener { JTextField txt = new JTextField(""); StringBuffer copyBoard=new StringBuffer(20); private String cmd = "="; private double result = 0;// 运算结果 private boolean start = true; StringBuffer strs=new StringBuffer(); class Window { Window() { Frame help=new Frame("关于作者"); help.setBounds(400,200,200,200); help.setVisible(true); help.setResizable(false); help.addWindowListener(new WindowAdapter() //关闭窗口 { public void windowClosing(WindowEvent e) { ((Frame)e.getSource()).dispose(); } } ); TextArea title = new TextArea(" 软件125实训项目 一 制作:第二组 常志铭 朱靖 2013.5.10 ",10,8,TextArea.SCROLLBARS_NONE); title.setBounds(50,50,200,30); title.setEditable(false); help.add(title); } } MyCalculator() { this.setTitle("我的计算器"); this.setBounds(400,150,225,320); this.createMenu(); this.createMainPanel(); this.addWindowListener(new WindowAdapter() //关闭窗口 { public void windowClosing(WindowEvent e) { System.exit(0); } } ); this.setResizable(false); this.setVisible(true); } private void createMenu() { MenuBar bar = new MenuBar(); this.setMenuBar(bar); Menu EditMenu = new Menu("编辑(E)"); Menu helpMenu = new Menu("帮助(H)"); bar.add(EditMenu); bar.add(helpMenu); MenuItem copyItem = new MenuItem("复制"); copyItem.setShortcut(new MenuShortcut(KeyEvent.VK_C,false)); EditMenu.add(copyItem); copyItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String temp = txt.getText().trim(); copyBoard.replace(0, copyBoard.length(), temp); } } ); MenuItem pasteItem = new MenuItem("粘帖"); pasteItem.setShortcut(new MenuShortcut(KeyEvent.VK_V,false)); EditMenu.add(pasteItem); pasteItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { txt.setText(copyBoard.toString()); result=(Double.parseDouble(copyBoard.toString())); } } ); MenuItem helpItem = new MenuItem("关于计算器"); helpItem.setShortcut(new MenuShortcut(KeyEvent.VK_H,false)); helpMenu.add(helpItem); helpItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { new Window(); } } ); } private void createMainPanel() { //整体面板 Panel Win = new Panel(null); Win.setSize(230, 330); Win.setVisible(true); //Win.setBackground(Color.black); this.add(Win); //显示 txt.setHorizontalAlignment(JTextField.RIGHT); txt.setBounds(5,5,210,50); txt.setFont(new java.awt.Font("Dialog", 1, 30)); txt.setEditable(false); Win.add(txt); //按键面板 Panel Butt = new Panel(null); Butt.setBounds(0, 50, 230, 280); //Butt.setBackground(Color.white); Butt.setVisible(true); Win.add(Butt); Button butx = new Button("C"); butx.setBounds(15,15,40,28); butx.addActionListener(this); butx.setFont(new java.awt.Font("Dialog", 1, 15)); Butt.add(butx); Button butz = new Button("←"); butz.setBounds(65,15,40,28); butz.setFont(new java.awt.Font("Dialog", 1, 20)); butz.addActionListener(this); Butt.add(butz); Button butcf = new Button("/"); butcf.setBounds(115,15,40,28); butcf.setFont(new java.awt.Font("Dialog", 0, 20)); butcf.addActionListener(this); Butt.add(butcf); Button butc = new Button("*"); butc.setBounds(165,15,40,28); butc.setFont(new java.awt.Font("Dialog", 1, 25)); butc.addActionListener(this); Butt.add(butc); Button but7 = new Button("7"); but7.setBounds(15,55,40,28); but7.setFont(new java.awt.Font("Dialog", 0, 15)); but7.addActionListener(this); Butt.add(but7); Button but8 = new Button("8"); but8.setBounds(65,55,40,28); but8.setFont(new java.awt.Font("Dialog", 0, 15)); but8.addActionListener(this); Butt.add(but8); Button but9 = new Button("9"); but9.setBounds(115,55,40,28); but9.setFont(new java.awt.Font("Dialog", 0, 15)); but9.addActionListener(this); Butt.add(but9); Button butjf = new Button("-"); butjf.setBounds(165,55,40,28); butjf.setFont(new java.awt.Font("Dialog", 0, 28)); butjf.addActionListener(this); Butt.add(butjf); Button but4 = new Button("4"); but4.setBounds(15,95,40,28); but4.setFont(new java.awt.Font("Dialog", 0, 15)); but4.addActionListener(this); Butt.add(but4); Button but5 = new Button("5"); but5.setBounds(65,95,40,28); but5.setFont(new java.awt.Font("Dialog", 0, 15)); but5.addActionListener(this); Butt.add(but5); Button but6 = new Button("6"); but6.setBounds(115,95,40,28); but6.setFont(new java.awt.Font("Dialog", 0, 15)); but6.addActionListener(this); Butt.add(but6); Button butj = new Button("+"); butj.setBounds(165,95,40,28); butj.setFont(new java.awt.Font("Dialog", 0, 20)); butj.addActionListener(this); Butt.add(butj); Button but1 = new Button("1"); but1.setBounds(15,135,40,28); but1.setFont(new java.awt.Font("Dialog", 0, 15)); but1.addActionListener(this); Butt.add(but1); Button but2 = new Button("2"); but2.setBounds(65,135,40,28); but2.setFont(new java.awt.Font("Dialog", 0, 15)); but2.addActionListener(this); Butt.add(but2); Button but3 = new Button("3"); but3.setBounds(115,135,40,28); but3.setFont(new java.awt.Font("Dialog", 0, 15)); but3.addActionListener(this); Butt.add(but3); Button bute = new Button("="); bute.setBounds(165,135,40,68); bute.setFont(new java.awt.Font("Dialog", 0, 25)); bute.addActionListener(this); Butt.add(bute); Button but0 = new Button("0"); but0.setBounds(15,175,90,28); but0.setFont(new java.awt.Font("Dialog", 0, 15)); but0.addActionListener(this); Butt.add(but0); Button butd = new Button("."); butd.setBounds(115,175,40,28); butd.setFont(new java.awt.Font("Dialog", 1, 25)); butd.addActionListener(this); Butt.add(butd); } public void actionPerformed(ActionEvent event) { String sf = event.getActionCommand(); if(sf.equals("9")||sf.equals("8")||sf.equals("7")||sf.equals("6")||sf.equals("5")||sf.equals("4")||sf.equals("3")||sf.equals("2")||sf.equals("1")||sf.equals("0")||sf.equals("C")||sf.equals("←")||sf.equals(".")) { String input = sf; if (start) { txt.setText(""); start = false; } if (input.equals("←")) { String str = txt.getText(); if (str.length() > 0) txt.setText(str.substring(0, str.length() - 1)); } else if (input.equals("C")) { txt.setText("0"); start = true; } else txt.setText(txt.getText() + input); } else { String command = sf; if (start) { cmd = command; } else { calculate(Double.parseDouble(txt.getText())); cmd = command; start = true; } } } public void calculate(double x) { if (cmd.equals("+")) result += x; else if (cmd.equals("-")) result -= x; else if (cmd.equals("*")) result *= x; else if (cmd.equals("/")) result /= x; else if (cmd.equals("=")) result = x; txt.setText("" + result); } public static void main (String[] args) { new MyCalculator(); } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值