找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1999|回复: 1
打印 上一主题 下一主题
收起左侧

用JAVA程序编写简单计算器

[复制链接]
跳转到指定楼层
楼主
ID:361500 发表于 2018-12-31 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
package jisuanji;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.accessibility.AccessibleAction;
import javax.swing.JButton;
import javax.swing.JTextField;
public class jisuanjicalc extends JFrame{
        JButton equalJB,divJB,button0JB,button1JB,button2JB,button3JB,button4JB,button5JB,button6JB,
        button7JB,button8JB,button9JB,addJB,subJB,mulJB,dotJB,CEJB,EXITJB,bsJB;//窗口组件(按钮)
        JButton numJB[]=new JButton[10];
        JPanel panelJP,panel2JP,panel3JP;//定义面板
        JLabel equalJL,errorJL;//创造窗口需要显示组件
        JTextField num1JT;
        //GUI开发+的一般步骤:
        //1.创建窗口类,继承自JFrame
        //2.定义相关组件的引用名(包括面板的引用名)
        //3.在构造器方法中创建组件对象并且与引用名关联。
        //4.创建面板,将将组件添加到面板(中间容器)
        //5.将面板,添加到窗口(顶层容器)
        //6.设置窗口大小,可见性,标题栏……  (详细,仔细参考JDK文档 )
        //7.创建内部类(组件的事件响应代码)
        //8.添加相应组件的事件监听

        double a=0,b=0,c;
        boolean dotflag=false;
        String operator;
        public jisuanjicalc() {
                errorJL=new JLabel("");
                num1JT=new JTextField(26);//数字的作用是调用构造文本框宽度
                num1JT.setPreferredSize(new Dimension(50, 50));//数字的作用是调用构造文本框高度
                //num1JT.setEditable(false);//不可改写窗口
                //divJB.addActionListener(new exitAction() );
                /*button0JB=new JButton("0");//添加按妞
                button1JB=new JButton("1");
                button2JB=new JButton("2");
                button3JB=new JButton("3");
                button4JB=new JButton("4");
                button5JB=new JButton("5");
                button6JB=new JButton("6");
                button7JB=new JButton("7");
                button8JB=new JButton("8");
                button9JB=new JButton("9");*/
                for(int i=0;i<numJB.length;i++) {
                        numJB[i]=new JButton(i+"");
                }
                addJB=new JButton("+");
                subJB=new JButton("-");
                mulJB=new JButton("*");
                divJB=new JButton("÷");
                dotJB=new JButton(".");
                equalJB=new JButton("=");
                CEJB=new JButton("CE");
                EXITJB=new JButton("EXIT");
                bsJB=new JButton("←―");
                dotJB.addActionListener(new dotAction());
                equalJB.addActionListener(new equalAction() );
                addJB.addActionListener(new operatorAction() );//使按钮有效(监听)
                subJB.addActionListener(new operatorAction() );
                mulJB.addActionListener(new operatorAction() );
                divJB.addActionListener(new operatorAction() );
                CEJB.addActionListener(new CEAction() );
                EXITJB.addActionListener(new EXITAction() );
                bsJB.addActionListener(new bsAction() );
               
                for(int i=0;i<numJB.length;i++) {
                        numJB[i].addActionListener(new numAction());
                }
                /*button0JB.addActionListener(new numAction() );
                button1JB.addActionListener(new numAction() );
                button2JB.addActionListener(new numAction() );
                button3JB.addActionListener(new numAction() );
                button4JB.addActionListener(new numAction() );
                button5JB.addActionListener(new numAction() );
                button6JB.addActionListener(new numAction() );
                button7JB.addActionListener(new numAction() );
                button8JB.addActionListener(new numAction() );
                button9JB.addActionListener(new numAction() );*/
                panelJP=new JPanel();//添加面板
                panel2JP=new JPanel();
                panel3JP=new JPanel();//让相应组件在相应的面板
                panelJP.add(num1JT);
                for(int i=1;i<=3;i++) {
                        panel2JP.add(numJB[i]);
                }
                panel2JP.add(addJB);
                for(int i=4;i<=6;i++) {
                        panel2JP.add(numJB[i]);
                }
                panel2JP.add(subJB);
                for(int i=7;i<=9;i++) {
                        panel2JP.add(numJB[i]);
                }
                panel2JP.add(mulJB);
                panel2JP.add(numJB[0]);
                /*panel2JP.add(button1JB);
                panel2JP.add(button2JB);
                panel2JP.add(button3JB);
                panel2JP.add(button4JB);
                panel2JP.add(button5JB);
                panel2JP.add(button6JB);
                panel2JP.add(button7JB);
                panel2JP.add(button8JB);
                panel2JP.add(button9JB);
                panel2JP.add(button0JB);*/
                panel2JP.add(dotJB);
                panel2JP.add(divJB);
                panel2JP.add(equalJB);
                panel2JP.setLayout(new GridLayout(5,8,8,8));
                panel3JP.add(errorJL);
                panel2JP.add(CEJB);
                panel2JP.add(EXITJB);
                panel2JP.add(bsJB);
                //this.add(CEJB,BorderLayout.CENTER);
                //this.add(panelJP,BorderLayout.NORTH);//边界布局的北边.布局方式:流式布局(FloatLayout)、边界布局(BorderLayout)、网格布局(GirLayout)
                this.add(panelJP,BorderLayout.NORTH);//为不同的面板布局,显示不同面板的内容
                this.add(panel2JP,BorderLayout.CENTER);
                this.add(panel3JP,BorderLayout.SOUTH);
                this.setTitle("计算器");
                this.setSize(300,450);//设置窗口大小
                this.setResizable(false);
                this.setVisible(true);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
//        class calcAction implements ActionListener{
//                public void actionPerformed(ActionEvent m) {
//                                errorJL.setText("数字格式错误");
//                                num1JT.setText("");
//                        c=a+b;
//                        c=(double)(Math.round(c*100))/100;//设置保留数字位数
//                        num1JT.setText(c+"");
//                }
//        }
        //创建事件类部          //实现监听器接口
        class numAction implements ActionListener{
                public void actionPerformed(ActionEvent e) {
                        JButton tempJB=(JButton)e.getSource();//强转为按妞,接下来与tempJB的getText
                        num1JT.setText(num1JT.getText()+tempJB.getText());//让文本框获取按妞的内容
                        }               
                }
        class equalAction implements ActionListener{
                public void actionPerformed(ActionEvent q) {
                        try {
                                        b=Double.parseDouble(num1JT.getText());
                                        switch(operator) {
                                                case "+":c=a+b;break;
                                                case "-":c=a-b;break;
                                                case "*":c=a*b;break;
                                                case "÷":c=a/b;break;
                                        }
                        c=(double)(Math.round(c*100))/100;
                        num1JT.setText(c+"");
                        }catch(NumberFormatException m) {
                                 JOptionPane.showMessageDialog(null, "数字格式错误");
                                 num1JT.setText("");
                                 }
                }
        }
        class dotAction implements ActionListener{
                public void actionPerformed(ActionEvent e) {
                        if(dotflag==false)
                                num1JT.setText(num1JT.getText()+e.getActionCommand());
                        dotflag=true;
                        }               
                }
        class operatorAction implements ActionListener{
                public void actionPerformed(ActionEvent e) {
                        try {
                        a=Double.parseDouble(num1JT.getText());
                        }catch(NumberFormatException m){
                        num1JT.setText("");//此前应将operator定义为全局变量
                        }
                        num1JT.setText("");
                        operator=e.getActionCommand();//获取组件标签、文本
                        dotflag=false;
        }
        }
        class CEAction implements ActionListener{
                public void actionPerformed(ActionEvent e) {       
                        num1JT.setText("");
                        operator=e.getActionCommand();//获取组件标签、文本
                        dotflag=false;
                }
                }
        class bsAction implements ActionListener{
                public void actionPerformed(ActionEvent e) {
                        String str=num1JT.getText();
                        num1JT.setText(str.substring(0,str.length()-1));//取数字长度减一位的内容
                       
                }
        }
        class EXITAction implements ActionListener{
                public void actionPerformed(ActionEvent e) {
                System.exit(0);
                }
        }
        public  static void main (String[] args) {
                new jisuanjicalc();       
        }
       
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:467774 发表于 2019-1-14 11:18 | 只看该作者
好资料,51有你更精彩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表