zoukankan      html  css  js  c++  java
  • java-Coculator

      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);// AC
    129         btns[18].addActionListener(this);// 1/x
    130         btns[16].addActionListener(this);// %
    131         btns[13].addActionListener(this);// +/-
    132         btns[14].addActionListener(this);// SQRT
    133         btns[11].addActionListener(this);// AE
    134         btns[12].addActionListener(this);// C
    135         btns[23].addActionListener(this);// Backspace
    136         
    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高400
    142         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 stub
    150         MyCoculator c =  new MyCoculator();
    151         c.init();
    152     }
    153 
    154     @Override
    155     public void actionPerformed(ActionEvent e) {
    156         // TODO Auto-generated method stub
    157         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 }
  • 相关阅读:
    linux系统性能监控常用命令
    如何在windows的DOS窗口中正常显示中文(UTF-8字符)
    在Windows的CMD中如何设置支持UTF8编码?
    设置cmd的codepage的方法
    Oracle字符集转换
    移动端跨平台开发的深度解析
    类型擦除是抽象泛型的实例化的过程
    FP又称为Monadic Programming
    深入剖析Swift性能优化
    真实世界中的 Swift 性能优化
  • 原文地址:https://www.cnblogs.com/JasonKuLaLa/p/10964307.html
Copyright © 2011-2022 走看看