制作计算器窗口java_Java实现的窗口计算器
1 packageljm.calculator;2
3 import javax.swing.*;4 import java.awt.*;5 importjava.io.Serializable;6 import java.math.*;7
8 public classMain {9 public static voidmain(String[] args) {10 new Calculator("敏敏敏牌計算器 - [email?protected]");11 }12 }13
14 class Calculator extendsJFrame {15 private TextArea show; //顯示
16
17 publicCalculator(String t){18 super(t);19 setLayout(null);20 setSize(430,488);21 setVisible(true);22 setLocationRelativeTo(null);23 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);24 setResizable(false);25 this.setBackground(new Color(237, 239, 238));26
27 setShow();28 addBut();29 setVisible(true);30 }31
32 private voidsetShow() {33 show = new TextArea("",8,52,1);34 show.setSize(415,102);35 show.setLocation(0,0);36 show.setFont(new Font("", Font.BOLD, 40));37 show.setBackground(Color.WHITE);38 show.setForeground(new Color(48, 48, 48));39 show.setEditable(false);40 show.setText(0 + "");41 this.add(show);42 }43
44 private double nub1 = 0; //數1
45 private double nub2 = 0; //數2
46 private String snub2 = ""; //數2的字符串型
47 private int f = ‘+‘; //運算符號
48 private boolean isDoc = false; //是否有小數點
49 private boolean isEqual = false; //是否點擊等于
50 private int nubLen = 0;51
52 private void setBut(String s, int i, int j, int x, int y, final intc) {53 Button b = newButton(s);54 b.setLocation(x, y);55 b.setSize(i, j);56 b.setFont(new Font("", Font.BOLD, 35));57 b.setBackground(new Color(254, 254, 254));58 b.setForeground(new Color(88, 92, 100));59
60 //計算邏輯算法61 //62 //2020.6.23 JXUT
63 b.addActionListener(e ->{64 if (c < 10) {65 //數字0-9
66 if(isEqual) {67 nub1 = 0;68 }69 if (nubLen > 20) {70 return;71 }72 if (c == 0 && nub2 == 0) {73 return;74 }75 snub2 +=String.valueOf(c);76 show.setText(snub2);77 nubLen =show.getText().length();78 nub2 =Double.parseDouble(snub2);79
80 } else if (c == ‘.‘) {81 //小數
82 if (nubLen > 20) {83 return;84 }85 if (!isDoc) {86 if (nub2 != 0) {87 snub2 += ".";88 } else{89 snub2 = "0.";90 }91 nub2 =Double.parseDouble(snub2);92 show.setText(snub2);93 isDoc = true;94 }95
96 } else if (c == ‘S‘) {97 //結果相反數
98 if (Double.parseDouble(show.getText()) ==nub1) {99 nub1 = 0 -nub1;100 showf(nub1 +"");101 } else{102 nub2 = 0 -nub2;103 showf(nub2 +"");104 }105 } else if (c == ‘C‘) {106 //歸零
107 nub1 = 0;108 nub2 = 0;109 snub2 = "";110 f = ‘+‘;111 isDoc = false;112 isEqual = false;113 nubLen = 0;114 showf("0");115 } else{116 isEqual = false;117 nubLen = 0;118
119 switch(f) {120 case ‘/‘:121 //除法
122 nub1 =DoubleUtil.divide(nub1, nub2);123 break;124 case ‘*‘:125 //乘法
126 nub1 =DoubleUtil.mul(nub1, nub2);127 break;128 case ‘-‘:129 //減法
130 nub1 =DoubleUtil.sub(nub1, nub2);131 break;132 case ‘+‘:133 //加法
134 nub1 =DoubleUtil.add(nub1, nub2);135 break;136 }137
138 showf(nub1 + "");139 if (c != ‘=‘) {140 f =c;141 } else{142 //等于
143 f = ‘+‘;144 isEqual = true;145 }146
147 nub2 = 0;148 snub2 = "";149 isDoc = false;150 }151 });152 this.add(b);153 }154
155
156 //去0小數
157 private voidshowf(String s ){158 double td =Double.parseDouble(s);159 int ti = (int)td;160
161 if (td ==ti) {162 show.setText(ti +"");163 } else{164 show.setText(td + "");165 }166 }167
168 private voidaddBut() {169 setBut("AC", 215, 70, 0, 100, ‘C‘);170 setBut("±", 107, 70, 214, 100, ‘S‘);171 setBut("÷", 108, 70, 312, 100, ‘/‘);172
173 setBut("7", 107, 70, 0, 170, 7);174 setBut("8", 108, 70, 107, 170, 8);175 setBut("9", 107, 70, 214, 170, 9);176 setBut("×", 108, 70, 312, 170, ‘*‘);177
178 setBut("4", 107, 70, 0, 240, 4);179 setBut("5", 108, 70, 107, 240, 5);180 setBut("6", 107, 70, 214, 240, 6);181 setBut("-", 108, 70, 312, 240, ‘-‘);182
183 setBut("1", 107, 70, 0, 310, 1);184 setBut("2", 108, 70, 107, 310, 2);185 setBut("3", 107, 70, 214, 310, 3);186 setBut("+", 108, 70, 312, 310, ‘+‘);187
188 setBut("0", 107, 70, 0, 380, 0);189 setBut(".", 108, 70, 107, 380, ‘.‘);190 setBut("=", 215, 70, 214, 380, ‘=‘);191 }192
193 }194
195 //BigDecimal的Double精確計算
196 class DoubleUtil implementsSerializable {197 private static final long serialVersionUID = -3345205828566485102L;198 private static final Integer DEF_DIV_SCALE = 40; //除法精度199
200 //精確加
201 public staticDouble add(Double value1, Double value2) {202 BigDecimal b1 = newBigDecimal(Double.toString(value1));203 BigDecimal b2 = newBigDecimal(Double.toString(value2));204 returnb1.add(b2).doubleValue();205 }206
207 //精確減
208 public static doublesub(Double value1, Double value2) {209 BigDecimal b1 = newBigDecimal(Double.toString(value1));210 BigDecimal b2 = newBigDecimal(Double.toString(value2));211 returnb1.subtract(b2).doubleValue();212 }213
214 //精確乘
215 public staticDouble mul(Double value1, Double value2) {216 BigDecimal b1 = newBigDecimal(Double.toString(value1));217 BigDecimal b2 = newBigDecimal(Double.toString(value2));218 returnb1.multiply(b2).doubleValue();219 }220
221 //精確除 精度為 DEF_DIV_SCALE
222 public staticDouble divide(Double dividend, Double divisor) {223 returndivide(dividend, divisor, DEF_DIV_SCALE);224 }225
226 //精確除
227 public static doubledivide(Double dividend, Double divisor, Integer scale) {228 if (scale < 0) {229 return -1;230 }231 BigDecimal b1 = newBigDecimal(Double.toString(dividend));232 BigDecimal b2 = newBigDecimal(Double.toString(divisor));233 returnb1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();234 }235
236 }
總結
以上是生活随笔為你收集整理的制作计算器窗口java_Java实现的窗口计算器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么运行了java文件老是404_ja
- 下一篇: java 类交互图_Java与UML交互