Java swing实现的计算器功能完整实例
程序员文章站
2024-02-21 11:58:52
本文实例讲述了java swing实现的计算器功能。分享给大家供大家参考,具体如下:
package awtdemo;
import java.awt.*;...
本文实例讲述了java swing实现的计算器功能。分享给大家供大家参考,具体如下:
package awtdemo; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.vector; public class calculator { string str1 = "0"; // 运算数1 初值一定为0 为了程序的安全 string str2 = "0"; // 运算数2 string signal = "+"; // 运算符 string result = "";// 结果 // 状态开关 int k1 = 1;// 开关1 用于选择输入方向 将要写入str2或 str2 int k2 = 1;// 开关2 符号键 次数 k2>1说明进行的是2+3-9+8 这样的多符号运算 int k3 = 1;// 开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0 int k4 = 1;// 开关4 str2 同上 int k5 = 1;// 开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉 jbutton store; // 寄存器 记录 是否连续按下符号键 @suppresswarnings("rawtypes") vector vt = new vector(20, 10); jframe frame = new jframe(" - 计算器"); jtextfield result_textfield = new jtextfield(result, 20);// 20列 jbutton clear_button = new jbutton("清除"); jbutton button0 = new jbutton("0"); jbutton button1 = new jbutton("1"); jbutton button2 = new jbutton("2"); jbutton button3 = new jbutton("3"); jbutton button4 = new jbutton("4"); jbutton button5 = new jbutton("5"); jbutton button6 = new jbutton("6"); jbutton button7 = new jbutton("7"); jbutton button8 = new jbutton("8"); jbutton button9 = new jbutton("9"); jbutton button_dian = new jbutton("."); jbutton button_jia = new jbutton("+"); jbutton button_jian = new jbutton("-"); jbutton button_cheng = new jbutton("*"); jbutton button_chu = new jbutton("/"); jbutton button_dy = new jbutton("="); calculator() { button0.setmnemonic(keyevent.vk_0);// 等效键 // 其它 等效键 略, result_textfield.sethorizontalalignment(jtextfield.right);// 文本框 右对齐 jpanel pan = new jpanel(); pan.setlayout(new gridlayout(4, 4, 5, 5));// 四行四列 边距为5像素 pan.add(button7); pan.add(button8); pan.add(button9); pan.add(button_chu); pan.add(button4); pan.add(button5); pan.add(button6); pan.add(button_cheng); pan.add(button1); pan.add(button2); pan.add(button3); pan.add(button_jian); pan.add(button0); pan.add(button_dian); pan.add(button_dy); pan.add(button_jia); pan.setborder(borderfactory.createemptyborder(5, 5, 5, 5));// pan对象的边距 jpanel pan2 = new jpanel(); pan2.setlayout(new borderlayout()); pan2.add(result_textfield, borderlayout.west); pan2.add(clear_button, borderlayout.east); frame.setlocation(300, 200); // 主窗口 出现在位置 frame.setresizable(false); // 不能调大小 frame.getcontentpane().setlayout(new borderlayout()); frame.getcontentpane().add(pan2, borderlayout.north); frame.getcontentpane().add(pan, borderlayout.center); frame.pack(); frame.setvisible(true); // 事件处理 程 序 // 数 字 键 class listener implements actionlistener { @suppresswarnings("unchecked") public void actionperformed(actionevent e) { string ss = ((jbutton) e.getsource()).gettext(); store = (jbutton) e.getsource(); vt.add(store); if (k1 == 1) { if (k3 == 1) { str1 = ""; k5 = 1;// 还原开关k5状态 } str1 = str1 + ss; k3 = k3 + 1; result_textfield.settext(str1);// 显示 } else if (k1 == 2) { if (k4 == 1) { str2 = ""; k5 = 1; // 还原开关k5状态 } str2 = str2 + ss; k4 = k4 + 1; result_textfield.settext(str2); } } } // 符 号 class listener_signal implements actionlistener { @suppresswarnings("unchecked") public void actionperformed(actionevent e) { string ss2 = ((jbutton) e.getsource()).gettext(); store = (jbutton) e.getsource(); vt.add(store); if (k2 == 1) { k1 = 2;// 开关 k1 为1时,向数1写 为2时,向数2写 k5 = 1; signal = ss2; k2 = k2 + 1;// 按符号键的次数 } else { int a = vt.size(); jbutton c = (jbutton) vt.get(a - 2); if (!(c.gettext().equals("+")) && !(c.gettext().equals("-")) && !(c.gettext().equals("*")) && !(c.gettext().equals("/"))) { cal(); str1 = result; k1 = 2;// 开关 k1 为1时,向数1写 为2时,向数2写 k5 = 1; k4 = 1; signal = ss2; } k2 = k2 + 1; } } } // 清除 class listener_clear implements actionlistener { @suppresswarnings("unchecked") public void actionperformed(actionevent e) { store = (jbutton) e.getsource(); vt.add(store); k5 = 1; k2 = 1; k1 = 1; k3 = 1; k4 = 1; str1 = "0"; str2 = "0"; signal = ""; result = ""; result_textfield.settext(result); vt.clear(); } } // 等 于 class listener_dy implements actionlistener { @suppresswarnings("unchecked") public void actionperformed(actionevent e) { store = (jbutton) e.getsource(); vt.add(store); cal(); k1 = 1; // 还原开关k1状态 // str1=result; k2 = 1; k3 = 1;// 还原开关k3状态 k4 = 1; // 还原开关k4状态 str1 = result; // 为7+5=12 +5=17 这种计算做准备 } } // 小数点 class listener_xiaos implements actionlistener { @suppresswarnings("unchecked") public void actionperformed(actionevent e) { store = (jbutton) e.getsource(); vt.add(store); if (k5 == 1) { string ss2 = ((jbutton) e.getsource()).gettext(); if (k1 == 1) { if (k3 == 1) { str1 = ""; k5 = 1; // 还原开关k5状态 } str1 = str1 + ss2; k3 = k3 + 1; result_textfield.settext(str1);// 显示 } else if (k1 == 2) { if (k4 == 1) { str2 = ""; k5 = 1; // 还原开关k5状态 } str2 = str2 + ss2; k4 = k4 + 1; result_textfield.settext(str2); } } k5 = k5 + 1; } } // 注册 监听器 listener_dy jt_dy = new listener_dy(); listener jt = new listener();// 临听数字键 listener_signal jt_signal = new listener_signal();// 临 听符 号键 listener_clear jt_c = new listener_clear(); // 清除键 listener_xiaos jt_xs = new listener_xiaos();// 小数点 键 button7.addactionlistener(jt); button8.addactionlistener(jt); button9.addactionlistener(jt); button_chu.addactionlistener(jt_signal); button4.addactionlistener(jt); button5.addactionlistener(jt); button6.addactionlistener(jt); button_cheng.addactionlistener(jt_signal); button1.addactionlistener(jt); button2.addactionlistener(jt); button3.addactionlistener(jt); button_jian.addactionlistener(jt_signal); button0.addactionlistener(jt); button_dian.addactionlistener(jt_xs); button_dy.addactionlistener(jt_dy); button_jia.addactionlistener(jt_signal); clear_button.addactionlistener(jt_c); // 关闭事件处理程序 frame.addwindowlistener(new windowadapter() { public void windowclosing(windowevent e) { system.exit(0); } }); } // 计 算 public void cal() { double a2;// 运算数1 double b2;// 运算数2 string c = signal;// 运算符 double result2 = 0;// 结果 if (c.equals("")) { result_textfield.settext("请输入运算符"); } else { if (str1.equals(".")) // 字符串 "." 转换成double型数据时 会出错 所以手工转 str1 = "0.0"; if (str2.equals(".")) str2 = "0.0"; a2 = double.valueof(str1).doublevalue(); b2 = double.valueof(str2).doublevalue(); if (c.equals("+")) { result2 = a2 + b2; } if (c.equals("-")) { result2 = a2 - b2; } if (c.equals("*")) { result2 = a2 * b2; } if (c.equals("/")) { if (b2 == 0) { result2 = 0; } else { result2 = a2 / b2; } } result = ((new double(result2)).tostring()); result_textfield.settext(result); } } @suppresswarnings("unused") public static void main(string[] args) { // 界面风格,可以去除 try { uimanager.setlookandfeel("com.sun.java.swing.plaf.windows.windowslookandfeel"); } catch (exception e) { e.printstacktrace(); } calculator cal = new calculator(); } }
运行效果:
ps:这里再为大家推荐几款计算工具供大家进一步参考借鉴:
在线一元函数(方程)求解计算工具:
科学计算器在线使用_高级计算器在线计算:
在线计算器_标准计算器:
更多关于java算法相关内容感兴趣的读者可查看本站专题:《java数据结构与算法教程》、《java操作dom节点技巧总结》、《java文件与目录操作技巧汇总》和《java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。