java版计算器
发布时间:2020-12-15 00:11:28 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;import java.awt.*;import java.math.BigDecimal;im
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import java.awt.*; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; import java.awt.Color; /** * java版计算器 */ public class Calculator extends JFrame { final int WIN_W = 250,WIN_H = 250; JPanel myPanel,panelSuper; public Calculator() { // 主面板 panelSuper = new JPanel(); panelSuper.setLayout(null); // 设置窗口位置 double width = Toolkit.getDefaultToolkit().getScreenSize().width; double height = Toolkit.getDefaultToolkit().getScreenSize().height; this.setBounds((int) (width - WIN_W) / 2,(int) (height - WIN_H) / 2,WIN_W,WIN_H); // 窗口配置 this.setTitle("java版计算器"); this.validate(); this.setResizable(false); this.setVisible(true); this.setDefaultCloSEOperation(DISPOSE_ON_CLOSE); // 添加计算器按钮面板 myPanel = new MyPanel(); this.add(myPanel,BorderLayout.CENTER); } public static void main(String[] args) { new Calculator(); } /** * 计算器按钮面板类 */ class MyPanel extends JPanel implements ActionListener { JButton button1,button2,button3,button4,button5,button6,button7,button8,button9,button0,buttonJia,buttonJian,buttonCheng,buttonChu,buttonDeng,buttonDian,buttonC,buttonDel,buttonZF,buttonGH; JTextField jTextField; // 计算器显示屏 char oper; // 操作符 String key,allKey = "1234567890.±del",jjccKey = "+-*/"; BigDecimal d1,d2; boolean first; public MyPanel() { // 设置布局 this.setLayout(new FlowLayout(FlowLayout.LEFT,4,5)); // 计算器显示屏 jTextField = new JTextField(21); jTextField.setHorizontalAlignment(JTextField.RIGHT); jTextField.setEditable(false); jTextField.setBackground(new Color(255,255,255)); jTextField.setText("0"); this.add(jTextField); // 计算器按钮 button1 = new JButton("1"); button2 = new JButton("2"); button3 = new JButton("3"); button4 = new JButton("4"); button5 = new JButton("5"); button6 = new JButton("6"); button7 = new JButton("7"); button8 = new JButton("8"); button9 = new JButton("9"); button0 = new JButton("0"); buttonJia = new JButton("+"); buttonJian = new JButton("-"); buttonCheng = new JButton("*"); buttonChu = new JButton("/"); buttonDeng = new JButton("="); buttonDian = new JButton("."); buttonDel = new JButton("del"); buttonC = new JButton("c"); buttonZF = new JButton("±"); buttonGH = new JButton("√"); button1.setPreferredSize(new Dimension(55,30)); button2.setPreferredSize(new Dimension(55,30)); button3.setPreferredSize(new Dimension(55,30)); button4.setPreferredSize(new Dimension(55,30)); button5.setPreferredSize(new Dimension(55,30)); button6.setPreferredSize(new Dimension(55,30)); button7.setPreferredSize(new Dimension(55,30)); button8.setPreferredSize(new Dimension(55,30)); button9.setPreferredSize(new Dimension(55,30)); button0.setPreferredSize(new Dimension(55,30)); buttonJia.setPreferredSize(new Dimension(55,30)); buttonJian.setPreferredSize(new Dimension(55,30)); buttonCheng.setPreferredSize(new Dimension(55,30)); buttonChu.setPreferredSize(new Dimension(55,30)); buttonDeng.setPreferredSize(new Dimension(55,30)); buttonDian.setPreferredSize(new Dimension(55,30)); buttonDel.setPreferredSize(new Dimension(55,30)); buttonC.setPreferredSize(new Dimension(55,30)); buttonZF.setPreferredSize(new Dimension(55,30)); buttonGH.setPreferredSize(new Dimension(55,30)); this.add(buttonDel); this.add(buttonC); this.add(buttonZF); this.add(buttonGH); this.add(button1); this.add(button2); this.add(button3); this.add(buttonJia); this.add(button4); this.add(button5); this.add(button6); this.add(buttonJian); this.add(button7); this.add(button8); this.add(button9); this.add(buttonCheng); this.add(button0); this.add(buttonDian); this.add(buttonDeng); this.add(buttonChu); buttonDel.addActionListener(this); buttonC.addActionListener(this); buttonZF.addActionListener(this); buttonGH.addActionListener(this); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); button5.addActionListener(this); button6.addActionListener(this); button7.addActionListener(this); button8.addActionListener(this); button9.addActionListener(this); button0.addActionListener(this); buttonJia.addActionListener(this); buttonJian.addActionListener(this); buttonCheng.addActionListener(this); buttonChu.addActionListener(this); buttonDeng.addActionListener(this); buttonDian.addActionListener(this); // 计算器初始化 init(); } /** * 计算器初始化 */ public void init() { d1 = new BigDecimal("0"); d1 = new BigDecimal("0"); key = "="; oper = '='; jTextField.setText("0"); first = true; // 用于标记是否进行连续操作(例如按键顺序为“9*9====”,第一次等于first由true变为false,如果!first,按等号相当于用上一次的结果与第二个操作数相乘) } /** * 按钮监听 */ public void actionPerformed(ActionEvent e) { JButton b = (JButton) e.getSource(); if (b == buttonDian) { // 按下. jTextField.setText(jTextField.getText() + "."); if (first) { d2 = d1 = getNum(); } else { d2 = getNum(); } } else if (b == buttonZF) {// 按下± BigDecimal d = getNum(); d = new BigDecimal("0").subtract(d); setFormatNum(d); if (first) { d2 = d1 = getNum(); } else { d2 = getNum(); } } else if (b == buttonDel) {// 按下del if (jTextField.getText().length() == 1 || jTextField.getText().length() == 2 && jTextField.getText().startsWith("-")) { jTextField.setText("0"); } else { String s = jTextField.getText(); s = s.substring(0,s.length() - 1); if (s.endsWith("E+") || s.endsWith("E-")) s = s.substring(0,s.length() - 2); jTextField.setText(s); if (first) { d2 = d1 = getNum(); } else { d2 = getNum(); } } } else if (b == buttonC) {// 按下c init(); } else if (b == buttonJia) {// 按下+ BigDecimal s; if (!first && allKey.indexOf(key) >= 0) { if (oper == '-' || oper == '/') { s = operate(d1,oper,d2); } else { s = operate(d2,d1); } setFormatNum(s); }// 如果不是第一次,且上一次操作是对数字进行操作 else { first = false; } d2 = d1 = getNum(); // System.out.print("111我执行啦n"); oper = '+'; } else if (b == buttonJian) {// 按下- BigDecimal s; if (!first && allKey.indexOf(key) >= 0) { s = operate(d1,d2); setFormatNum(s); }// 如果不是第一次,且上一次操作是对数字进行操作 else { first = false; } d2 = d1 = getNum(); oper = '-'; } else if (b == buttonCheng) {// 按下* BigDecimal s; if (!first && allKey.indexOf(key) >= 0) { if (oper == '-' || oper == '/') { s = operate(d1,d1); } setFormatNum(s); }// 如果不是第一次,且上一次操作是对数字进行操作 else { first = false; } d2 = d1 = getNum(); oper = '*'; } else if (b == buttonChu) {// 按下/ BigDecimal s; if (!first && allKey.indexOf(key) >= 0) { s = operate(d1,d2); setFormatNum(s); }// 如果不是第一次,且上一次操作是对数字进行操作 else { first = false; } d2 = d1 = getNum(); oper = '/'; } else if (b == buttonGH) {// 按下平方根 if (jTextField.getText().startsWith("-")) { init(); return; } BigDecimal d = getNum(); MathContext mc = new MathContext(10,RoundingMode.HALF_DOWN); d = new BigDecimal(Math.sqrt(d.doubleValue()),mc); setFormatNum(d); if (first) { d2 = d1 = getNum(); } else { d2 = getNum(); } } else if (b == buttonDeng) {// 按下= BigDecimal s = null; d2 = getNum(); if (!key.equals("=")) { s = operate(d1,d2); } else { s = operate(d2,d1); } if (oper != '=' && !key.equals("=")) {// 上一次操作为 +-*/ d1 = getNum(); } setFormatNum(s); first = true; } else { // 按下其他按钮 if (this.jTextField.getText().equals("0") || allKey.indexOf(key) == -1) { this.jTextField.setText(b.getText()); } else { this.jTextField.setText(jTextField.getText() + b.getText()); } if (first) { d2 = d1 = getNum(); } else { d2 = getNum(); }// d2作被加数:d2+d1 } key = b.getText(); } /** * 获取操作数 * * @return 操作数 */ public BigDecimal getNum() { BigDecimal d = new BigDecimal(jTextField.getText()); return d; } public void setFormatNum(BigDecimal dd) { MathContext mc = new MathContext(18,RoundingMode.HALF_DOWN); BigDecimal d = new BigDecimal(dd.toString(),mc); String num = d.toString(); if (num.endsWith(".0")) num = num.replaceAll(".0",""); this.jTextField.setText(num); } /** * 计算 * * @param a1 * 操作数1 * @param c * 操作符 * @param a2 * 操作数2 * @return */ public BigDecimal operate(BigDecimal a1,char c,BigDecimal a2) { MathContext mc = new MathContext(10,RoundingMode.HALF_DOWN); switch (c) { case '+': return a1.add(a2); case '-': return a1.subtract(a2); case '*': return a1.multiply(a2); case '/': if (a2.compareTo(new BigDecimal("0")) == 0) { init(); return new BigDecimal("0"); } return a1.divide(a2,mc); default: return a2; } } } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |