电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java gui實現計算器小程序

瀏覽:4日期:2022-08-09 08:07:46

本文實例為大家分享了java gui實現計算器小程序的具體代碼,供大家參考,具體內容如下

廢話不多說 , 直接貼代碼 , 有詳細的注釋 , 我也是剛學GUI沒多久

這個是效果圖 :

java gui實現計算器小程序

代碼:

package gui; /** * 導入所需要的包 **/import java.awt.*; // 這個是java的gui編程里面一個很重要的包import java.awt.event.*; // 用來處理事件所需要import java.util.Stack;// 棧 , 我用來處理運算的 public class Calculator extends Frame implements ActionListener{ /** * 先聲明一個公共類叫Calculator , 繼承自Frame類 , 實現ActionListener接口功能 **/ private static final long serialVersionUID = 1L; // 這個是用來控制版本的序列化 int frame_width = 1000,frame_height = 400; //設置整個框架的長寬 Panel panel_textfield,panel_number,panel_op,panel_other; // 整個計算器布局我把它分成兩個面板 , 一個是上面的輸入框區 , 一個是下面的按鈕區 , 然后按鈕區又分成了左邊和右邊兩個區 , 所以有三個panel Button [] number_buttons; // 聲明數字按鈕(也就是上面說的左邊區) Button [] op_buttons; // 聲明操作符按鈕(也就是上面說的右邊區) TextField textfield;// 輸入框 public Calculator() { super('計算器'); // 完成實例域參數的初始化,調用構造器的語句只能作為另一個構造器(通常指的是子類構造器)的第一條語句出現 init(); // 自己寫的初始化方法 setLayout(); // 設置布局管理方式 setBackground(); // 設置背景 setBounds(); // 設置位置 setFonts(); // 設置字體 addButtons(); // 添加按鈕 textfield.setEditable(false); // 設置輸入框為不可手動編輯 , 只能通過按鈕輸入 */ addWindowListener // 添加一個窗口監聽器,便于按下關閉按鈕時能關閉窗口 , 否則只能在ide里面停止調試來關閉程序( new WindowAdapter() {public void windowClosing(WindowEvent e) { System.exit(0);} }); setVisible(true); // 設置框架為可見,不然畫了框你也看不見...一定要放在最后面,放在前面的話,后面對窗體有改動得縮放拉伸一下窗體進行窗體重繪才能出現效果 , 我在這里卡了很久.... } public void init() {panel_textfield = new Panel(); // 實例化一個panel panel_number = new Panel(); // 實例化一個panel panel_op = new Panel();// 實例化一個panel panel_other = new Panel(); // 實例化一個panel textfield = new TextField(frame_width);// 實例化一個文本輸入框 setResizable(false); // 設置整個窗體為不可縮放拉伸 add(panel_textfield); // 往窗體中添加輸入框面板 add(panel_other); // 往窗體中添加按鈕面板 panel_textfield.add(textfield); // 在輸入框面板中添加輸入框 panel_other.add(panel_number);// 在下面面板中添加數字按鈕面板 panel_other.add(panel_op); // 在下面面板中添加操作符按鈕面板 } public void setLayout() { setLayout(new GridLayout(2,1,4,4)); // 設置窗體布局方式為網格布局,2*1的網格,網格之間間距為4個像素 panel_textfield.setLayout(null); // 輸入框面板就一個組件,所以設置null panel_other.setLayout(new GridLayout(1,2,4,4)); // 下面面板因為分成左邊的數字區和右邊的操作符區,所以設置1*2的網格布局方式,間距4個像素 panel_number.setLayout(new GridLayout(5,3,4,4)); // 數字區布局設置為5*3的網格布局 panel_op.setLayout(new GridLayout(3,1,4,4)); // 操作符區設置為3*1的網格布局方式 } public void setBackground() { // 設置背景,沒什么好說的.... panel_textfield.setBackground(Color.red); panel_number.setBackground(Color.green); panel_op.setBackground(Color.blue); } public void setBounds() { // 設置組件位置,沒什么好說的.... setBounds(0, 0, frame_width, frame_height); textfield.setBounds(0, 0, frame_width, frame_height / 2); } public void addButtons() { String [] titles1 = {'/', '*', '-', // 數字區按鈕的label值'7', '8', '9', '4', '5', '6', '1', '2', '3', '0', '.', 'c'}; String [] titles2 = {'x', '+', '='}; // 操作符區按鈕的label值 number_buttons = new Button[15]; // 申請15個按鈕對象 op_buttons = new Button[3];// 申請3個按鈕對象 for(int i = 0; i < this.number_buttons.length; i++) { number_buttons[i] = new Button(titles1[i]); panel_number.add(number_buttons[i]); // 往數字區中添加按鈕 number_buttons[i].addActionListener(this); // 按鈕的事件監聽器,處理方法為this,也就是下面重載的actionPerformed()方法,這個方法必須被重載 } for(int i = 0; i < this.op_buttons.length; i++) { op_buttons[i] = new Button(titles2[i]); // 往操作符區中添加按鈕 panel_op.add(this.op_buttons[i]); op_buttons[i].addActionListener(this); // 按鈕的事件監聽器,處理方法為this,也就是下面重載的actionPerformed()方法,這個方法必須被重載 } } @Override // 對ActionListener接口的此方法進行重載 public void actionPerformed(ActionEvent e) { Button button = (Button) e.getSource(); // 獲得按鈕來源 /** * 如果是數字鍵和操作符 , 則直接顯示 **/ for(int i = 0; i < 14; i++) { if(button == number_buttons[i] || button == op_buttons[1]) { textfield.setText(textfield.getText() + button.getLabel()); return; } } /** * 如果是c,則清空 **/ if(button == number_buttons[14]) { textfield.setText(''); return; } /** * 如果是回退按鈕 , 則清除最近的一個字符 **/ if(button == op_buttons[0]) { String s = textfield.getText(); if(s.length() > 0) textfield.setText(s.substring(0, s.length() - 1)); return; } /** * 如果是=,則計算結果 **/ if(button == op_buttons[2]) { textfield.setText(getResult()); return; } } public String getResult() { /** * 計算結果 **/ String s = textfield.getText(); // 先獲得輸入的字符串 String num = ''; Stack<Double> nums = new Stack<Double>(); Stack<String> ops = new Stack<String>(); /** * 利用regex分離操作數和操作符,然后用棧進行結果的計算 **/ for(int i = 0; i < s.length(); i++) { String temp = s.charAt(i) + ''; if(temp.matches('[0-9]') || temp.matches('[.]')) { num += temp; } else if(temp.matches('[*+]') || temp.matches('[-]') | temp.matches('[/]')) { if(!num.equals('')) nums.push(Double.parseDouble(num)); if(ops.isEmpty() || cmpLevel(temp,ops.peek())) { ops.push(temp); } else { Double num1 = nums.pop(); Double num2 = nums.pop(); String op2 = ops.pop(); nums.push(compute(num2,num1,op2)); i--; } num = ''; } } while(!ops.isEmpty()) { if(!num.equals('')) { nums.push(compute(nums.pop(),Double.parseDouble(num),ops.pop())); num = ''; } else { Double num1 = nums.pop(); Double num2 = nums.pop(); nums.push(compute(num2,num1,ops.pop())); } } return nums.pop().toString(); } /** * 將兩個操作數根據操作符進行運算 , 返回結果 ** / public Double compute(double num1,double num2,String op) { if(op.equals('+')) { return num1 + num2; } else if(op.equals('-')) { return num1 - num2; } else if(op.equals('*')) { return num1 * num2; } else return num1 / num2; } /** * 比較兩個操作符的優先級 **/ public boolean cmpLevel(String s1,String s2) { if(s1.equals('+') || s1.equals('-')) { return false; } else { if(s2.equals('+') || s2.equals('-')) return true; return false; } } /** * 設置每個組件的字體 **/ public void setFonts() { panel_number.setFont(new Font('微軟雅黑',Font.PLAIN,24)); panel_op.setFont(new Font('微軟雅黑',Font.PLAIN,24)); panel_other.setFont(new Font('微軟雅黑',Font.PLAIN,24)); textfield.setFont(new Font('微軟雅黑',Font.PLAIN,48)); } /** * main方法 **/ public static void main(String [] args) { new Calculator(); } }

關于計算器的精彩文章請查看《計算器專題》 ,更多精彩等你來發現!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 模型公司_模型制作_沙盘模型报价-中国模型网 | 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 一体化污水处理设备-一体化净水设备-「山东梦之洁水处理」 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 电磁铁_推拉电磁铁_机械手电磁吸盘电磁铁厂家-广州思德隆电子公司 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 立式硫化罐-劳保用品硫化罐-厂家直销-山东鑫泰鑫硫化罐厂家 | 挤出机_橡胶挤出机_塑料挤出机_胶片冷却机-河北伟源橡塑设备有限公司 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 广州物流公司_广州货运公司_广州回程车运输 - 万信物流 | 成都LED显示屏丨室内户外全彩led屏厂家方案报价_四川诺显科技 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 稳尚教育加盟-打造高考志愿填报平台_新高考志愿填报加盟_学业生涯规划加盟 | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 外贸资讯网 - 洞悉全球贸易,把握市场先机 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | TPM咨询,精益生产管理,5S,6S现场管理培训_华谋咨询公司 | 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | BOE画框屏-触摸一体机-触控查询一体机-触摸屏一体机价格-厂家直销-触发电子 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 质构仪_鱼糜弹性仪-上海腾拔仪器科技有限公司 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 永嘉县奥阳陶瓷阀门有限公司 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 |