java 小计算器_java简单计算器

1 importjava.awt.BorderLayout;2 importjava.awt.Button;3 importjava.awt.Color;4 importjava.awt.Dimension;5 importjava.awt.Frame;6 importjava.awt.GridLayout;7 importjava.awt.Panel;8 importjava.awt.TextField;9 importjava.awt.event.ActionEvent;10 importjava.awt.event.ActionListener;11 importjava.awt.event.MouseEvent;12 importjava.awt.event.MouseListener;13

14 public class Calculator extends Frame implementsActionListener,MouseListener {15 /**

16 * button上的名字17 */

18 private final String KEY[] = {"7","8" ,"9" ,"/" ,"4" ,"5" ,"6" ,"*" ,"1" ,"2" ,"3" ,"-" ,"0" ,"." ,"C" ,"+" ,"+/-" ,"%" ,"←" ,"="};19 /**

20 * 创建一个button数组21 */

22 private Button key[] = newButton[ KEY. length];23

24 /**

25 * 计算结果的文本框26 */

27 private TextField tf = new TextField( "0");28 /**标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字*/

29 private boolean firstNum = true;30 /**计算的中间结果。*/

31 private double resultNum = 0.0;32 /**当前运算的运算符*/

33 private String operator = "=";34 /**操作是否合法*/

35 private boolean operateValidFlag = true;36

37

38

39 /**

40 * 创建布局以及添加组件41 */

42 public voidadditionLayout(){43 //构造一个有标题的构造方法

44 Frame f = new Frame( "计算器");45 //定义一个窗口事件监听器用于关闭窗口

46 f.addWindowListener( newMyWindowListener());47 //放button的面板

48 Panel p = newPanel();49 Panel p2 = newPanel();50 //定义panel的布局方式

51 p.setLayout( new GridLayout(5,4,5,5));52 p2.setLayout( new GridLayout(1,1,5,5));53 //使文本框不可编辑

54 tf.setEditable( false);55

56 //用for循环创建button并加入到面板中

57 for( int i = 0;i< KEY. length;i++){58 key[i] = newButton( KEY[i]);59 key[i].setBackground(Color. cyan);60 p.add( key[i]);61 }62 //为所有的button注册事件监听器

63 for ( int i = 0; i < KEY. length; i++) {64 key[i].addActionListener( this);65 key[i].addMouseListener( this);66 }67 tf.setPreferredSize( new Dimension(20,30));68 p2.add( tf);69 f.add(p,BorderLayout. CENTER);70 f.add(p2,BorderLayout. NORTH);71 f.setSize(333,235); //设置窗口大小

72 f.setLocation(550, 200); //设置窗口的初始位置

73 f.setResizable( false); //不可改变窗口大小

74 f.setVisible( true); //设置窗口可见

75 }76

77 /**

78 * 监听器处理事件79 */

80 @Override81 public voidactionPerformed(ActionEvent e) {82 String label =e.getActionCommand();83 if( "0123456789.".indexOf(label)>=0){84 //用户按了数字键

85 handleNumber(label);86 } else if(label.equals( KEY[14])){87 //用户按了C键

88 handleC();89 } else if (label.equals( KEY[18])) {90 //用户按了"Backspace"键

91 handleBackspace();92 } else{93 //用户按了运算符键

94 handleOperator(label);95 }96 }97 /**

98 * 处理数字键与小数点被按下的事件99 *100 */

101 private voidhandleNumber(String num){102 if( firstNum){103 //输入第一个数字

104 tf.setText(num);105 } else if((num.equals( ".")) && (tf.getText().indexOf( ".") < 0)){106 //输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面

107 tf.setText( tf.getText() + ".");108 } else if(!num.equals( ".")){109 //如果输入的不是小数点,则将数字附在结果文本框的后面

110 tf.setText( tf.getText() +num);111 }112

113 firstNum = false;114 }115

116 /**

117 * 处理C键被按下的事件118 */

119 private voidhandleC(){120 //初始化计算器的各种值

121 tf.setText( "0");122 firstNum = true;123 operator = "=";124 }125

126 /**

127 * 处理Backspace键被按下的事件128 */

129 private voidhandleBackspace() {130 String text =tf.getText();131 int i =text.length();132 if (i > 0) {133 //退格,将文本最后一个字符去掉

134 text = text.substring(0, i - 1);135 if (text.length() == 0) {136 //如果文本没有了内容,则初始化计算器的各种值

137 tf.setText( "0");138 firstNum = true;139 operator = "=";140 } else{141 //显示新的文本

142 tf.setText(text);143 }144 }145 }146

147 /**

148 * 处理运算符键被按下的事件149 */

150 private voidhandleOperator(String oper){151 if ( operator.equals( "/")) {152 //除法运算153 //如果当前结果文本框中的值等于0

154 if (getNumberFromText() == 0.0) {155 //操作不合法

156 operateValidFlag = false;157 tf.setText( "除数不能为零");158 } else{159 resultNum /=getNumberFromText();160 }161 } else if ( operator.equals( "+")) {162 //加法运算

163 resultNum +=getNumberFromText();164 } else if ( operator.equals( "-")) {165 //减法运算

166 resultNum -=getNumberFromText();167 } else if ( operator.equals( "*")) {168 //乘法运算

169 resultNum *=getNumberFromText();170 } else if ( operator.equals( "=")) {171 //赋值运算

172 resultNum =getNumberFromText();173 } else if ( operator.equals( "+/-")) {174 //正数负数运算

175 resultNum = resultNum * (-1);176 } else if ( operator.equals( "%")) {177 //百分号运算,除以100

178 resultNum = resultNum / 100;179 }180 if( operateValidFlag) {181 //双精度浮点数的运算

182 longt1;183 doublet2;184 t1 = ( long) resultNum;185 t2 = resultNum -t1;186 if (t2 == 0) {187 tf.setText(String. valueOf(t1));188 } else{189 tf.setText(String. valueOf(resultNum));190 }191 }192 //运算符等于用户按的按钮

193 operator =oper;194 firstNum = true;195 operateValidFlag = true;196 }197

198 /**

199 * 从文本框中获取数字200 */

201 private doublegetNumberFromText() {202 double result = 0;203 try { //异常捕获

204 result =Double.valueOf(tf.getText()).doubleValue();205 } catch(NumberFormatException e) {206 }207 returnresult;208 }209

210 //鼠标进入按钮时变为黄色

211 @Override212 public voidmouseEntered(MouseEvent e) {213 Button b =(Button)e.getSource();214 b.setBackground(Color. yellow);215 }216 //鼠标离开按钮时恢复颜色

217 @Override218 public voidmouseExited(MouseEvent e) {219 Button b =(Button)e.getSource();220 b.setBackground(Color. CYAN);221 }222 //鼠标在按钮上按下时变为红色

223 @Override224 public voidmousePressed(MouseEvent e) {225 Button b =(Button)e.getSource();226 b.setBackground(Color. red);227 }228 //鼠标在按钮上释放时恢复颜色

229 @Override230 public voidmouseReleased(MouseEvent e) {231 Button b =(Button)e.getSource();232 b.setBackground(Color. CYAN);233

234

235 }236

237 @Override238 public voidmouseClicked(MouseEvent arg0) {239 //TODO Auto-generated method stub

240

241 }242

243

244

245

246 /**

247 * 测试类248 *249 */

250 public static voidmain(String[] args) {251 Calculator c = newCalculator();252 c.additionLayout();253 }254

255 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值