经过一个月的Java学习,听说Java中的第一个小型程序好多都做的是计算器,今天我也来做做吧,把这一个月学习的知识简单的综合一下,熟练近期学习的知识点。
我做的计算器如下图:
功能:对实数进行加、减、乘、除、余操作。
界面设置:首先设置一个窗体,一个菜单条,三个菜单项(无功能),三个标签(作为显示数据的地方,第一个标签作为提示作用,第二个标签作为输入数据作用,第三个标签显示结果作用),20个按钮(循环进行添加),两个面板(把三个标签添加到第一个面板里,把20个按钮添加到第二个面板里,用网格布局,这样做不易位置错乱),再把两个面板添加到窗体中就OK了。
下面是完整代码,在一个类中,注释非常详细。
package day7_29;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
public class Caculate {
// 对计算器整体框架的建立
private JFrame frame = new JFrame("&斌的图形界面计算器&");// 创建窗体对象
private JMenuBar menubar = new JMenuBar(); // 创建菜单条对象
private JMenu menu1 = new JMenu("查看"); // 创建菜单对象1
private JMenu menu2 = new JMenu("编辑"); // 创建菜单对象2
private JMenu menu3 = new JMenu("帮助"); // 创建菜单对象3
private JLabel label_hint = new JLabel(); // 创建提示信息标签
private JLabel label_input = new JLabel(); // 创建输入信息标签
private JLabel label_result = new JLabel(); // 创建输出结果标签3
private JPanel panel_show = new JPanel(); // 创建显示面板
private JPanel panel_operation = new JPanel(); // 创建按键面板
private String[] str = { "AC", "←", "(-)", "+", "7", "8", "9", "-", "4", "5", "6", "*", "1", "2", "3", "÷", "%",
"0", ".", "=" }; // 计算器的按键从上到下、从左到右顺序表示
private JButton[] button = new JButton[str.length]; // 创建计算器的按键对象
private double result = 0; // 存储计算结果
private boolean flag = true; //
private boolean find = true;
private String command = "=";
public static void main(String[] args) {// 主方法
new Caculate().initJFrame();
}
// 对界面进行初始化
public void initJFrame() {
Container con = frame.getContentPane();
con.setBackground(Color.green); // 设置颜色
// 设置窗体位置及大小(下面一段代码实现居中)
frame.setSize(600, 550);
//方法一
// Toolkit toolKit = Toolkit.getDefaultToolkit(); // 获取默认工具包
// Dimension dimension = toolKit.getScreenSize(); // 获取屏幕对象
// double screenWidth = dimension.getWidth(); // 获取屏幕的宽和高
// double screenHight = dimension.getHeight();
// int jframeWidth = frame.getWidth(); // 获取窗体的宽和高
// int jframeHight = frame.getHeight();
// int x = (int) ((screenWidth - jframeWidth) / 2); // 得到窗体真正位置
// int y = (int) ((screenHight - jframeHight) / 2);
// frame.setLocation(x, y); // 设置窗体居中
//方法二
frame.setLocationRelativeTo(null);//设置窗口相对于指定组件的位置。如果组件当前未显示,或者 c 为 null,则此窗口将置于屏幕的中央。
menubar.add(menu1);// 把菜单添加到菜单条中
menubar.add(menu2);
menubar.add(menu3);
menu1.setFont(new Font("", Font.BOLD, 20));// 设置菜单字体样式
menu2.setFont(new Font("", Font.BOLD, 20));
menu3.setFont(new Font("", Font.BOLD, 20));
frame.setJMenuBar(menubar);// 把菜单添加到菜单条中
label_hint.setText(" "); // 标签内容初始化为空
label_hint.setHorizontalAlignment(JLabel.RIGHT); // 设置图标和文本的水平对齐方式为右对齐
label_hint.setFont(new Font("宋体", Font.BOLD, 30));// 设置此标签的字体。
label_hint.setForeground(Color.RED); // 设置字体颜色为红色
label_input.setText(" "); // 标签内容初始化为空
label_input.setHorizontalAlignment(JLabel.RIGHT); // 设置图标和文本的水平对齐方式为右对齐
label_input.setFont(new Font("宋体", Font.BOLD, 30));// 设置此标签的字体。
label_input.setForeground(Color.BLACK); // 设置字体颜色为黑色
label_result.setText("0");// 标签内容初始化内容为0
label_result.setHorizontalAlignment(JLabel.RIGHT); // 设置图标和文本的水平对齐方式为右对齐
label_result.setFont(new Font("宋体", Font.BOLD, 35));// 设置此标签的字体。
label_result.setForeground(Color.BLUE); // 设置字体颜色为蓝色
panel_show.setLayout(new BorderLayout()); // 设置为边界布局
panel_show.add(label_hint, BorderLayout.NORTH); // 把错误提示标签放在上面
panel_show.add(label_input, BorderLayout.CENTER);// 把输入信息标签放在中间
panel_show.add(label_result, BorderLayout.SOUTH);// 把输出结果标签放在下面
// 创建具有指定类型、高亮显示和阴影颜色的斜面边框。
panel_show.setBorder(
new BevelBorder(BevelBorder.RAISED, new Color(160, 170, 180), null, SystemColor.scrollbar, null));
panel_operation.setLayout(new GridLayout(5, 4, 8, 8));// 按键设置为网格布局5行5列间距为8
// 创建具有指定类型、高亮显示和阴影颜色的斜面边框。凸出斜面类型。为滚动条提供的背景色。
panel_operation.setBorder(
new BevelBorder(BevelBorder.RAISED, new Color(160, 170, 180), null, SystemColor.scrollbar, null));
// 添加按钮
for (int i = 0; i < str.length; i++) {
button[i] = new JButton(str[i]);
button[i].setFont(new Font("宋体", Font.BOLD, 30)); // 设置按钮中字体样式
if (str[i].equals("+") || str[i].equals("-") || str[i].equals("*") || str[i].equals("÷")
|| str[i].equals("%") || str[i].equals("=")) {
button[i].addActionListener(new OperationListener());// 给按钮+,-,*,/,%,=注册监听器
} else {
button[i].addActionListener(new DataListener());//给按钮AC,←,(-),.,0,1,2,3,4,5,6,7,8,9注册监听器
}
panel_operation.add(button[i]);// 把每个按钮分别添加到面板上
}
// 把面板添加到窗体框架里
frame.add(panel_operation, BorderLayout.CENTER);
frame.add(panel_show, BorderLayout.NORTH);
//frame.setResizable(false); // 设置窗体不能改变大小
frame.setVisible(true); // 设置窗体可见
frame.setDefaultCloseOperation(frame.DISPOSE_ON_CLOSE);// 释放窗口
}
public class DataListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();//返回与此动作相关的命令字符串。
if (Caculate.this.flag == true) {//当想输入新的数字时,清空输入显示标签
label_input.setText(" ");
Caculate.this.flag = false;
}
if (str.equals("(-)")) {//当点击(-)时
if (label_input.getText().indexOf("(-)") == -1) {//如果此时显示框里还没出现(-)时
label_input.setText(str);
}
}
if (!str.equals("(-)")) {//当命令不是(-)时
if (str.equals("AC")) { //点击清零键时
clear();
} else if (str.equals("←")) { //点击返回键时
getBack();
} else if (str.equals(".")) { // 点击小数点时,小数点只能出现一次,不能在首位
if (label_input.getText().indexOf(".") == -1 && !label_input.getText().equals(" ")) {
label_input.setText(label_input.getText() + str);
} else {
//clear();
label_input.setText(label_input.getText() + str);
label_hint.setText("小数点不合法,请重新输入");
}
} else { //点击0,1,2,3,4,5,6,7,8,9时显示原数
label_input.setText(label_input.getText() + str);
}
}
}
}
// 返回上一级
public void getBack() {
if (label_input.getText().length() <= 1) { //长度小于等于1时清空显示框
clear();
} else {
String str = "";
if (label_input.getText().length() == 3) { //处理(-)问题,我把(-)看成算一个字符,要返回就整体返回
String str1 = label_input.getText().substring(label_input.getText().length() - 3);
if (str1.equals("(-)")) {
str = " ";
} else {
str = label_input.getText().substring(0, label_input.getText().length() - 1);
}
} else { //长度大于3时正常返回上一级
str = label_input.getText().substring(0, label_input.getText().length() - 1);
}
label_input.setText(str); //设置输入显示框为str
}
label_hint.setText(" "); //清空提示显示框
}
// 清屏
public void clear() {
label_hint.setText(" ");
label_input.setText(" ");
label_result.setText("0");
this.result = 0;
Caculate.this.flag = true; //恢复初始化标记
Caculate.this.find = true; //恢复初始化标记
}
public class OperationListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand(); // 返回与此动作相关的命令字符串
if (Caculate.this.flag == false) { //当第一次点击+,-,*,、,%,=时
if (label_input.getText().contains("(-)")) { //把(-)处理为-,然后在进行数据操作
label_input.setText(label_input.getText().replaceAll("//(-//)", "-"));
}
caculate(Double.parseDouble(label_input.getText())); //计算
Caculate.this.flag = true; //把flag标记处理点击多次操作运算符和输入下一个数的情况
Caculate.this.command = str; //供下一次数据运算操作命令
} else { //多次点击+,-,*,/,%,=时
Caculate.this.command = str;
if (str == "%" && Caculate.this.find == true) { //处理刚开始输入显示框为空时对0取余的情况
Caculate.this.find = false; //把find标记
Caculate.this.command = "=";
}
}
}
}
//进行数据运算
public void caculate(double ans) {
switch (this.command) {
case "+": //计算数据的和
this.result += ans;
break;
case "-": //计算数据的差
this.result -= ans;
break;
case "*": //计算数据的乘积
this.result *= ans;
break;
case "÷": //计算数据的商
if (ans == 0) {
label_hint.setText("提示:除数不能为0");
return;
}
this.result /= ans;
break;
case "%": //计算数据的余
double s1 = this.result;
int d1 = (int) s1;
double s2 = ans;
int d2 = (int) s2;
if (d1 == this.result && d2 == ans && d2 != 0) {
this.result %= ans;
} else {
if (d1 != s1) {
label_hint.setText("提示:余数的分子必须为整数");
}
else if (d2 != s2) {
label_hint.setText("提示:余数的分母必须为整数");
}
else if (s2 == 0) {
label_hint.setText("提示:余数的分母不能为0");
}
}
break;
case "=": //计算结果
this.result = ans;
break;
}
label_result.setText(" " + format(this.result)); //显示计算结果
}
//计算结果格式处理
public String format(double d) {
String formatString = "";
NumberFormat nf = NumberFormat.getInstance(); // 放回当前默认语言环境的通用数字格式
formatString = nf.format(d); // 格式规范化
return formatString; //返回格式化后的数据
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
时间:2020-05-18
这个计算器的界面模仿Windows自带的简易计算器,包括交互界面和和对各种输入的响应.目前尚未实现菜单栏和记忆类按钮的功能 复制代码 代码如下: import java.awt.Color;import java.awt.Container;import java.awt.GridLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import
本文实例为大家分享了java实现图形化界面计算器的具体代码,供大家参考,具体内容如下 最终效果图: 项目流程: 第一步:实现图形化界面(添加计算器的 Button 和 用于显示输入数字.输出结果的JTextField等) 第二步:给按钮和文本框添加鼠标监听事件. 第三步:实现加减乘除.开方.平方.清零和退格功能. 开方运算: 平方运算: 加法运算: 减法运算: 乘法运算: 除法运算: 完整项目代码: package First_App; import java.awt.*; import jav
本文实例为大家分享了java实现简单年龄计算器的具体代码,供大家参考,具体内容如下 制作一个如下图年龄计算器 根据题目,我做了一个由Calendar类以及年月日各相减得到的年龄,当然正确的方法不止一个,以下为我的源代码和结果截图: package com.Date; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.uti
一.前言 1)这个计算器是基于java语言下图形界面AWT编写的.其实我认为写这个计算器,实现什么功能不重要,市场也不缺这个计算器,而是在于对AWT中三大布局的及画板的使用简单控件的操作使用.通过联系熟悉掌握AWT基础为深入学习打下基础.这个计算器功能也十分简单,空有其表.不过有兴趣的话可以继续添加功能完善操作等. 2)使用平台:主要使用Myeclipse2014 3)主要知识点:java 基础; awt+swing 二.功能实现及代码展示 1)主要是layout布局的练习,对画板文本框的使用,
对于一个简单的计算器加法小程序,它首先是由五个组件构成的,三个文本框,两个用来输入数字,一个用来输出最后的结果,接下来是一个标签,标签的内容是加号,表示这里计算的是加法,最后一个组建是一个按钮,点击该按钮时会输出计算的结果.在这个小程序中,我们采用的布局管理器时FlowLayout.基本元素就是这些,接下来我们将演示两种实现的方法: (1).传递成员局部变量的方法,具体代码如下: package 实例11; import java.awt.*; import java.awt.event.*;
本文为大家分享了java实现简易计算器功能,具体内容如下 题目: 编写一个模拟计算器的程序.在面板中添加一个文本框(显示按键及运算结果). 10个数字按钮(0~9).4个运算按钮(加.减.乘.除).一个等号按钮.一个清除按钮, 要求将按键和结果显示在文本框中. 代码过程展示: import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.Action
本文实例讲述了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"
以下是代码: Calculator.java 复制代码 代码如下: package com.amos.model; import java.math.BigDecimal; /** * @ClassName: Calculator * @Description: 计算器 * @author: amosli * @email:amosli@infomorrow.com * @date Mar 20, 2014 1:04:59 AM */ public class Calculator {
java 简单的计算器程序 实现实例: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { CalculatorFrame frame = new Calculato
编写一个模拟计算器的应用程序,使用面板和网格布局, 添加一个文本框,10个数字按钮(0~9),4个加减乘除按钮, 一个等号按钮,一个清除按钮,一个求平方根按钮,一个退格按钮, 要求将计算公式和结果显示在文本框中,实现效果如下图所示. Java简易计算器代码: import javax.swing.*; import javax.swing.JTextField; import java.awt.*; import java.awt.event.*; import java.lang.*; imp
题目:使用栈计算类似表达式:5+2*3-2 的计算结果 提示:简易计算器操作符号限于+,-,*,/的计算 分析思路: 1.创建一个数栈和一个符号栈,数栈用于存放数字,符号栈用于存放符号 2.创建一个索引index,用于遍历表达式 3.扫描表达式,如果是数字直接进入数栈,如果是符号,则需要进行判断.分两种情况,一是当符号栈如果为空,直接将符号入栈.二是不为空,先比较当前栈顶的符号与将要进栈的符号的优先级大小,如果将要进栈的操作符的优先级小,则将数栈的两个数弹出,符号栈的操作符弹出一个,并进行计算
本文实例总结了Java编写计算器的常见方法.分享给大家供大家参考,具体如下: 方法一: package wanwa; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator extends JFrame { private Container container; private GridBagLayout layout; private GridBagConstraint
本文实例讲述了Python PyQt5实现的简易计算器功能.分享给大家供大家参考,具体如下: 这里剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它 [知识点] 1.利用循环添加按钮部件,及给每个按钮设置信号/槽 2.给按钮设置固定大小:button.setFixedSize(QtCore.QSize(60,30)) 3.取事件的的发送者(此例为各个按钮)的文本: self.sender().text() [效果图] [源代码] import sys from PyQt
本文实例介绍了基于python的Tkinter实现简易计算器的详细代码,分享给大家供大家参考,具体内容如下 第一种:使用python 的 Tkinter实现一个简易计算器 #coding:utf-8 from Tkinter import * import time root = Tk() def cacl(input_str): if "x" in input_str: ret = input_str.split("x") return int(ret[0]) *
之前发布了一款简易的计算器,今天做了一下修改,添加了键盘监听事件,不用再用鼠标点点点啦 JS代码: var yunSuan = 0;// 运算符号,0-无运算;1-加法;2-减法;3-乘法;4-除法 var change = 0;// 属于运算符后需要清空上一数值 var num1 = 0;// 运算第一个数据 var num2 = 0;// 运算第二个数据 var cunChuValue = 0;// 存储的数值 $(function() { $(".number").click(f
本文实例为大家分享了Android studio设计简易计算器的具体代码,供大家参考,具体内容如下 效果显示: 第一步,简单的界面布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.and
本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+1)*5.1-3+2**2 import re class SimpleCalc(object): # 表达式检测 def check(self,exp): # 合法字符检测 res = re.findall(r"[^/d/+/-/*//(/)/.]", exp) print(res) i
本文实例为大家分享了Android实现简易计算器小程序的具体代码,供大家参考,具体内容如下 目标效果: 通过编写代码,可以实现整数和小数的加减乘除运算,以及删除和清空的功能. 1.页面中Button使用的是线性布局,最外边一个是父布局,第一行C,DEL,/,*为第一个子布局,第二行7,8,9,-为第二个子布局,第三行4,5,6,+为第三个子布局,第四五行为第四个子布局,第四个子布局中还有两个相当于是孙布局的级别,1,2,3为第一个孙布局,0和.为第二个孙布局,=在两个孙布局之外第四个子布局以内.