java版计算器
发布时间:2020-05-24 16:26:20 所属栏目:Java 来源:互联网
导读:java版计算器
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 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;
}
}
}
}
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
