博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java-Coculator
阅读量:4678 次
发布时间:2019-06-09

本文共 8888 字,大约阅读时间需要 29 分钟。

1 package Coculator;  2   3 import java.awt.BorderLayout;  4 import java.awt.GridLayout;  5 import java.awt.event.ActionEvent;  6 import java.awt.event.ActionListener;  7 import java.math.*;  8   9 import javax.swing.JButton; 10 import javax.swing.JFrame; 11 import javax.swing.JMenu; 12 import javax.swing.JMenuBar; 13 import javax.swing.JMenuItem; 14 import javax.swing.JOptionPane; 15 import javax.swing.JPanel; 16 import javax.swing.JTextField; 17  18 public class MyCoculator extends JFrame implements ActionListener { 19      20 //    生成结果显示区,25个按钮,菜单栏 21     JTextField result = new JTextField(); 22     JButton[] btns = new JButton[25]; 23     JMenuBar mb = new JMenuBar(); 24      25 //    生成两个菜单 26     JMenu fileMenu = new JMenu("文件"); 27     JMenu helpMenu = new JMenu("帮助"); 28 //    生成菜单项 29     JMenuItem saveMI = new JMenuItem("保存"); 30     JMenuItem exitMI = new JMenuItem("退出"); 31     JMenuItem helpMI = new JMenuItem("帮助"); 32     JMenuItem aboutMI = new JMenuItem("关于"); 33      34 //    设置三个变量分别为结果,前一个操作数,后一个操作数 35     double cal,before,back; 36     String foreText = new String(""); 37     String backText = new String(""); 38     boolean flag = false;//判断第一个数输入是否结束 39     boolean eq = false;//判断等号操作 40     String op = "";//操作符 41      42     public void init() { 43 //        向文件菜单中添加保存,退出和一个分割线 44         fileMenu.add(saveMI); 45         fileMenu.addSeparator();//分割线 46         fileMenu.add(exitMI); 47          48 //        向帮助菜单中添加帮助,关于和一个分割线 49         helpMenu.add(helpMI); 50         helpMenu.addSeparator(); 51         helpMenu.add(aboutMI); 52          53 //        把这两个菜单添加到菜单栏里 54         mb.add(fileMenu); 55         mb.add(helpMenu); 56          57 //        使用边界布局管理器把结果区放在上部 58         this.add(result, BorderLayout.NORTH); 59          60 //        因为center区只能放一个块,所以把25个按钮放到一个JPanel里,再把JPanel放到center区中 61         JPanel p = new JPanel(); 62         p.setLayout(new GridLayout(5,5,3,3));//使用网格布局设置5行5列,水平垂直间距都为3 63          64 //        把25个按钮放在25个单元格里 65          66 //        先生成0~9十个数字按钮 67         for(int i=0;i<10;i++) { 68             btns[i] = new JButton(String.valueOf(i)); 69             btns[i].addActionListener(this); 70         } 71          72         btns[10] = new JButton("AC"); 73         btns[11] = new JButton("CE"); 74         btns[12] = new JButton("C"); 75         btns[13] = new JButton("+/-"); 76         btns[14] = new JButton("SQRT"); 77 //        放第一行按钮 78         p.add(btns[10]); 79         p.add(btns[11]); 80         p.add(btns[12]); 81         p.add(btns[13]); 82         p.add(btns[14]); 83          84         btns[15] = new JButton("/"); 85         btns[16] = new JButton("%"); 86 //        放第二行按钮 87         p.add(btns[7]); 88         p.add(btns[8]); 89         p.add(btns[9]); 90         p.add(btns[15]); 91         p.add(btns[16]); 92          93         btns[17] = new JButton("*"); 94         btns[18] = new JButton("1/x"); 95 //        放第三行按钮 96         p.add(btns[4]); 97         p.add(btns[5]); 98         p.add(btns[6]); 99         p.add(btns[17]);100         p.add(btns[18]);101         102         btns[19] = new JButton("-");103         btns[20] = new JButton("=");104 //        放第四行按钮105         p.add(btns[1]);106         p.add(btns[2]);107         p.add(btns[3]);108         p.add(btns[19]);109         p.add(btns[20]);110         111         btns[21] = new JButton(".");112         btns[22] = new JButton("+");113         btns[23] = new JButton("Backspace");114         btns[24] = new JButton("Help");115 //        放第五行按钮116         p.add(btns[0]);117         p.add(btns[21]);118         p.add(btns[22]);119         p.add(btns[23]);120         p.add(btns[24]);121         122         btns[21].addActionListener(this);// .123         btns[15].addActionListener(this);// /124         btns[17].addActionListener(this);// *125         btns[19].addActionListener(this);// -126         btns[22].addActionListener(this);// +127         btns[20].addActionListener(this);// =128         btns[10].addActionListener(this);// AC129         btns[18].addActionListener(this);// 1/x130         btns[16].addActionListener(this);// %131         btns[13].addActionListener(this);// +/-132         btns[14].addActionListener(this);// SQRT133         btns[11].addActionListener(this);// AE134         btns[12].addActionListener(this);// C135         btns[23].addActionListener(this);// Backspace136         137         this.add(p);//Java默认加到center区138         this.setJMenuBar(mb);139         this.setVisible(true);140         this.setResizable(true);//大小可变141         this.setBounds(700, 300, 400, 500);//位置(700,300),窗体宽300高400142         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭退出143         144 //        事件监听器145         aboutMI.addActionListener(this);146     }147     148     public static void main(String[] args) {149         // TODO Auto-generated method stub150         MyCoculator c =  new MyCoculator();151         c.init();152     }153 154     @Override155     public void actionPerformed(ActionEvent e) {156         // TODO Auto-generated method stub157         if(e.getSource()==this.aboutMI) {158             JOptionPane.showMessageDialog(null,"Made in ZhouXiangQ");159         }160         161 //        第一个操作数162         for(int i=0;i<=9;i++) {163             if(e.getSource()==btns[i]&&!flag) {164                 result.setText("");165                 foreText += e.getActionCommand();166                 result.setText(foreText);167             }168         }169 //        如果操作是点继续输入170         if(!flag && foreText!="") {171             if(e.getSource()==btns[21]) {172                 foreText += e.getActionCommand();173                 result.setText(foreText);174             }175         }176 //        如果操作是/,*,-,+,%等操作,就正式确定第一个数结束177         if(e.getSource()==btns[15]||178                 e.getSource()==btns[17]||179                     e.getSource()==btns[19]||180                         e.getSource()==btns[22]||181                             e.getSource()==btns[18]||182                                 e.getSource()==btns[14]||183                                     e.getSource()==btns[16]) {184             flag = true;185             this.before = Double.parseDouble(foreText);186             result.setText("");187             op = e.getActionCommand();188         }189 190 //        第二个数191         for(int i=0;i<=9;i++) {192             if(e.getSource()==btns[i]&&flag) {193                 backText += e.getActionCommand();194                 result.setText(backText);195             }196         }197         //如果操作是点且backText不空就继续输入198         if(flag&&backText!="") {199             if(e.getSource()==btns[21]) {200                 backText += e.getActionCommand();201                 result.setText(backText);202             }203         }204 //        如果操作是等号且flag为真,则判断op的具体操作。205         if(e.getSource()==btns[20]&&flag&&this.before>=0) {206             eq = true;207             this.back = Double.parseDouble(backText);208             if(op.equals("+"))209                 cal = this.before + this.back;210             else if(op.equals("-"))211                 cal = this.before - this.back;212             else if(op.equals("*"))213                 cal = this.before * this.back;214             else if(op.equals("/") && this.back!=0.0)215                 cal = this.before / this.back;216             else if(op.equals("%")) {217                 cal = Math.floorMod((int)this.before, (int)this.back);218             }219             else if(op.equals("+/-")) {220                 cal = cal*(-1);221             }222             else 223                 cal = 0.0;224             this.result.setText(String.valueOf(cal));225         }226 //        求导运算227         if(e.getSource()==btns[18]) {228             if(op.equals("1/x")) {229                 cal = 1/cal;230                 this.result.setText(String.valueOf(cal));231             }232         }233 //        开方运算234         if(e.getSource()==btns[14]) {235             if(op.equals("SQRT")) {236                 cal = Math.sqrt(cal);237                 this.result.setText(String.valueOf(cal));238             }239         }240 //        负数操作241         if(e.getSource()==btns[13] && foreText!="") {242             if(e.getActionCommand().equals("+/-")) {243                 String ff = result.getText();244                 flag = true;245                 this.before = Double.parseDouble(foreText);246                 result.setText("-" + ff);247                 this.before = this.before*(-1);248             }249         }250 //        归零251         if(e.getSource()==btns[10]||e.getSource()==btns[11]||e.getSource()==btns[12]) {252             flag = false;253             eq = false;254             foreText = "";255             backText = "";256             this.result.setText("0");257         }258         259 260 }

 

转载于:https://www.cnblogs.com/JasonKuLaLa/p/10964307.html

你可能感兴趣的文章