java实现计算器框架_[Java小程序] 实现简单计算器
这学期没事学了一点点Java,想写个程序练手,因为只学了一点点,所以暂时只能先写个实现简单功能的计算器练练。感觉写完后不是很好,如果路过的哪位高手给点建议,小弟万分感激啊。
由于期末来了,没太多时间,所以暂时就实现最简单的功能,等考试结束有时间再捣腾吧。
个人不喜欢用大量文字记叙程序,而且该程序也相对简单,所以直接画了张程序框架图,再配合代码的注释,就明白程序的原理了。
图 计算器程序框架
代码如下:
package tst.jframe;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.Font;
import javax.swing.SwingConstants;
public class javaAP {
/**
* 各控件对象的建立
*
* */
private JFrame frame;
private JTextField result;
private JButton button_1;
private JButton button_2;
private JButton button_3;
private JButton button_4;
private JButton button_5;
private JButton button_6;
private JButton button_7;
private JButton button_8;
private JButton button_9;
private JButton button_0;
private JButton Button_equal;
private JButton button_dot;
private JButton button_d0;
private JButton button_plus;
private JButton button_sub;
private JButton button_clr;
private JButton button_dlt;
private JButton button_mul;
private JButton button_div;
/**
* 几个变量,用于计算、判定,存放结构等。
* */
private boolean numflag = false; //用于标识是否输入数字
private boolean opflag = false; //用于标识是否输入运算操作符
private String txt = null; //显示结果的文本框的文本内容,用于存放计算结果的字符串形式
private String num_txt = ""; //每次输入一个数,以字符的形式加到该字符创变量,后面运算直接将该字符创转成double类型进行运算
private String op = " "; //存放输入的运算操作符
private double num1 = 0; //num1和num2用作运算
private double num2 = 0;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
javaAP window = new javaAP();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* 调用控件初始化函数,创建程序。
*/
public javaAP() {
initialize();
}
/**
* 初始化计算器的各个控件。
*/
private void initialize() {
frame = new JFrame(); //-----------------------------------------------
frame.setResizable(false); //
frame.setBounds(100, 100, 371, 371); // 窗口各个属性的初始化
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //
frame.getContentPane().setLayout(null); //-----------------------------------------------
result = new JTextField(); //-----------------------------------------------
result.setFont(new Font("Lao UI", Font.BOLD, 15)); //
result.setHorizontalAlignment(SwingConstants.RIGHT); //
result.setBounds(29, 28, 308, 50); // 显示结果的文本框的各个属性的初始化
frame.getContentPane().add(result); //
result.setColumns(10); //
result.setText(txt); //-----------------------------------------------
/**
* 0-9, 小数点,00 各个控件的初始化,给每个控件添加动作监听事件,每个控件被按下则调用numBtnAction函数。
*
* */
button_0 = new JButton("0");
button_0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("0");
}
});
button_0.setBounds(99, 273, 50, 50);
frame.getContentPane().add(button_0);
button_1 = new JButton("1");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("1");
}
});
button_1.setBounds(99, 213, 50, 50);
frame.getContentPane().add(button_1);
button_2 = new JButton("2");
button_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("2");
}
});
button_2.setBounds(159, 213, 50, 50);
frame.getContentPane().add(button_2);
button_3 = new JButton("3");
button_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("3");
}
});
button_3.setBounds(219, 213, 50, 50);
frame.getContentPane().add(button_3);
button_4 = new JButton("4");
button_4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("4");
}
});
button_4.setBounds(99, 157, 50, 50);
frame.getContentPane().add(button_4);
button_5 = new JButton("5");
button_5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("5");
}
});
button_5.setBounds(159, 157, 50, 50);
frame.getContentPane().add(button_5);
button_6 = new JButton("6");
button_6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("6");
}
});
button_6.setBounds(219, 157, 50, 50);
frame.getContentPane().add(button_6);
button_7 = new JButton("7");
button_7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("7");
}
});
button_7.setBounds(99, 97, 50, 50);
frame.getContentPane().add(button_7);
button_8 = new JButton("8");
button_8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("8");
}
});
button_8.setBounds(159, 97, 50, 50);
frame.getContentPane().add(button_8);
button_9 = new JButton("9");
button_9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("9");
}
});
button_9.setBounds(219, 97, 50, 50);
frame.getContentPane().add(button_9);
button_dot = new JButton(".");
button_dot.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction(".");
}
});
button_dot.setFont(new Font("宋体", Font.BOLD, 15));
button_dot.setBounds(159, 273, 50, 50);
frame.getContentPane().add(button_dot);
button_d0 = new JButton("00");
button_d0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numBtnAction("00");
}
});
button_d0.setBounds(219, 273, 50, 50);
frame.getContentPane().add(button_d0);
/**
* 运算符 =,+,-,*,/ 的初始化。
* */
Button_equal = new JButton("=");
Button_equal.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(opflag == true){
num2 = Double.parseDouble(num_txt); //如果此时opflag为true的话,证明已经输入运算符,这时候刚输入的数为另外一个操作数,所以赋给num2。
calc(op); //num1和num2进行运算。
}
result.setText(new Double(num1).toString()); //显示结果。
}
});
Button_equal.setBounds(279, 213, 50, 110);
frame.getContentPane().add(Button_equal);
button_plus = new JButton("+");
button_plus.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
opBtnAction("+");
}
});
button_plus.setBounds(279, 97, 50, 50);
frame.getContentPane().add(button_plus);
button_sub = new JButton("-");
button_sub.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
opBtnAction("-");
}
});
button_sub.setBounds(279, 157, 50, 50);
frame.getContentPane().add(button_sub);
button_mul = new JButton("*");
button_mul.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
opBtnAction("*");
}
});
button_mul.setBounds(39, 157, 50, 50);
frame.getContentPane().add(button_mul);
button_div = new JButton("/");
button_div.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
opBtnAction("/");
}
});
button_div.setBounds(39, 97, 50, 50);
frame.getContentPane().add(button_div);
/**
* 功能键clr:清空 和 dlt回删 两个按键的初始化。
*
* */
button_clr = new JButton("clr");
button_clr.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
result.setText(null); //清楚文本框和num_txt,num1和num2全部置为0,
txt = null; //numflag和opflag均置为false,全部置为程序开始的默认值。
numflag = opflag = false;
num1 = num2 = 0;
num_txt = "";
}
});
button_clr.setBounds(39, 273, 50, 50);
frame.getContentPane().add(button_clr);
button_dlt = new JButton("dlt");
button_dlt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(num_txt != "" && num_txt.length() > 0) {
num_txt = num_txt.substring(0, num_txt.length() - 1); //通过截取字符串的方式回删一个字符
}
if(txt != null && txt.length() > 0) {
txt = result.getText().substring(0,txt.length() - 1); //结果文本框的回删
result.setText(txt);
}
}
});
button_dlt.setBounds(39, 213, 50, 50);
frame.getContentPane().add(button_dlt);
}
/**
* 每个数字按键按下后触发的功能。
*
* @param num 传入字符串形式的数字
*
* */
private void numBtnAction(String num) {
if(num_txt == "" && opflag == false) { //判断是否num_txt是否为空,opflag是否为false,若满足这两个
result.setText(null); //条件,则为一次运算完毕,切新运算不以该次结果继续做运算。
num_txt = "";
}
numflag = true; //只要输入一个数,则把numflag置为true,表示已有数字输入
num_txt += num; //把输入的数加入到最终要转换成都double运算的字符串
txt = result.getText() + num; //加到txt,使输入的数显示到文本框中。
result.setText(txt);
}
/**
* 点下运算符键触发的动作
*
* @param operator 点击的运算符
*
* */
private void opBtnAction(String operator) {
if(opflag == false && num_txt != "") { //进行判断,如果opflag为false,则表示还没输入运算符,
num1 = Double.parseDouble(num_txt); //这个时候把num_txt转换成double赋给num1。
}
if(opflag == true && num_txt != ""){
num2 = Double.parseDouble(num_txt); //如果opflag为true,表示第一个数输入完毕,且已输入相应的运算符,这个时候是在输入第二个要参与运算的数,则加到num2
calc(op); //先计算两数结果,赋给num1,num2置为0,以便后面多层混合运算使用。
}
numflag = false; //numflag置为0,表示当前需要输入数进行运算
op = operator; //把新输入的运算符赋给op
result.setText(operator + " "); //在文本框显示
opflag = true; //opflag置为true,表示当前已输入一个或多个操作数。
num_txt = ""; //num_txt置为空,为了存储下一个操作数。
}
/**
* 进行 +、-、*、/ 的运算
* @param op 运算符
*
* */
private void calc(String op) {
switch(op){
case "+" :
num1 = num1 + num2;
num2 = 0;
opflag = false;
num_txt = "";
break;
case "-" :
num1 = num1 - num2;
num2 = 0;
opflag = false;
num_txt = "";
break;
case "*" :
if(num2 != 0) {
num1 = num1 * num2;
num2 = 0;
opflag = false;
num_txt = "";
}
break;
case "/" :
if(num2 != 0) {
num1 = num1 / num2;
num2 = 0;
opflag = false;
num_txt = "";
}
break;
default: opflag = false;
num_txt = "";
break;
}
}
}
java实现计算器框架_[Java小程序] 实现简单计算器相关推荐
- 小程序向java后台发送图片_微信小程序在后台如何将二进制流转换成图片
我在前端请求了小程序码返回的是一堆乱码, java不太熟网上找了一个方法可以将二进制流和图片互转,但是从微信小程序码接口获取的数据用这个方法无法获取正确的图片,不知道哪里有问题: 有没有只在前端就能获 ...
- java如何获取手机号码_微信小程序+Java获取用户授权手机号码
前言 小程序内可以直接通过授权获取用户微信号绑定的手机号码或用户添加的其他手机号码,这样可以使得小程序在进行账户的身份可控上又提高了一步,那么应该如何来获取手机号码呢?这篇文章就和大家一起来研究一下. ...
- java上拉变量_「小程序JAVA实战」小程序页面的上拉下拉刷新(50)
前已经完成了小程序的列表展示,但是对于上拉和下拉刷新这个功能,其实跟小程序的生命周期有关系,一起回顾下完成,上拉和下拉刷新.源码:https://github.com/limingios/wxProg ...
- java 微信https 证书_微信小程序HTTPS证书部署案例
微信小程序在2018年呈现出爆发趋势,背靠微信10亿日活流量,累积用户数超过4亿.曾经不被业界看好的轻应用模式,如今已变成互联网企业不可忽视的流量平台.微信小程序从上线之初,就强制要求通信连接HTTP ...
- vue 美团框架_美团小程序框架mpvue入门教程
美团小程序框架mpvue入门教程 本教程只针对新手,老鸟勿喷. 另外,我还专门为本文做了一个简单的项目,如果懒得从头开始搭项目的童鞋,可以直接去我的 github上克隆到本地, 安装一下依赖,即可直接 ...
- python代码测试健康指数计算器_Python入门级别的小程序(BMI计算器)
我是大涵呐,一个刚入Python的菜鸟,想通过自己了解的告诉同样刚学Python或者想学的朋友们一些基础的东西,希望对你们有所帮助. while True: # 1.输入身高(m).体重(kg) ,转 ...
- 瀑布流式页面布局_微信小程序——实现简单的瀑布流式布局
写页面时,考虑到美观,良好的用户体验,对于内容的展示我们经常会用到瀑布流式布局,那么如何实现一个简单的瀑布流呢? 瀑布流式布局 原理:遍历数组判断奇偶性,然后分左右排布,左右两边代码基本一致 直接上代 ...
- 四、微信小程序之简单计算器(学习记录)
1.数据动态绑定 数据动态绑定的语法如下: 2.进行实践 第一步:新建页面 在app.json中新建一个新的页面 ""pages/jisuanqi/jisuanqi",& ...
- 微信小程序项目实例——体质计算器
微信小程序项目实例--体质计算器 文章目录 微信小程序项目实例--体质计算器 一.项目展示 二.项目核心代码 文末 项目代码见文字底部,点赞关注有惊喜 一.项目展示 体质计算器是一款简单的健康类小程序 ...
最新文章
- 如何查看和关闭异常SQL进程
- umdh windbg分析内存泄露
- 使一个div垂直+水平居中的几种方法
- bgi::detail::intersection_content用法的测试程序
- 基于struts2+hibernate+spring(ssh2)的登录验证码的实现
- 安装Apache2.4.23
- 最新Linux教程发布下载【最后更新4月12日
- linux之tr命令使用和总结
- 2021年峰峰春晖中学高考成绩查询,峰峰春晖中学2019年录取分数线
- python根据行名称生成二维数组
- GD32F103基础教程—硬件介绍(四)
- python中常见函数总结
- win10 右键菜单管理
- 《掌控习惯》读书笔记
- Linux 中的 -rwxr-xr-x 权限代表什么意思 Linux 中的权限
- matlab绕线式三级串阻,三相绕线式异步电动机转子串电阻起动的MATLAB仿真
- cyusb3014数据传输出错和蓝屏的问题
- python电话_Python短信电话报警
- 【linux】三种权限的使用和更改、粘滞位和yum的使用
- redis aof 文件重写机制