admin管理员组文章数量:1647017
文章目录
-
- 一、实验目的:
- 二、实验内容
- 三、实验原理
- 四、运行
- 源代码:
- 一起学习,共同进步鸭~
一、实验目的:
1、掌握Java图形用户界面的编程设计方法;
2、掌握异常处理的编程方法。
3、掌握组件的监听和动作响应处理方法。
二、实验内容
实现一个计算器。要求:
1、参照Windows计算器功能,实现加、减、乘、除运算;
2、声明为按钮数组;
3、对0~9数字操作,采用相同的算法;
4、解决除数为零的问题;
5、具有清除一个数字、全部清除、开平方和平方功能。
6、计算结果保留4位小数。
7、界面缩放时,所有组件同步缩放,保持界面整体风格不变。
三、实验原理
- 首先分析界面的布局,可把界面分成上下两大部分
上面用一个面板来装文本框,下面用一个面板来装计算器的按钮。
框架默认布局是边框布局(BorderLayout),所以我将文本框所在的面板放在北部,将按钮所在的面板放在计算器的中部,就能达到预期的效果。
按钮所在面板采用网格布局(GridLayout),能实现当调整界面大小时所有组件同步缩放,保持界面整体风格不变。
为了尽量还原win10的计算器,我取消了按钮的边框和文本框的边框样式,以及在边界上进行了颜色,间距等的设置。(跟win10自带计算器颜色相近的rgb好难找啊,我在网上把颜色比对了好久 (ノ`Д)ノ)。 - 我为各按钮添加事件监听器的做法是都使用同一个事件监听器,处理事件时获取事件源并判断就行了。
为了判断用户通过按键输入的是整个表达式的第一个数字还是运算符后的第一个数字,我加了一个布尔变量firstDigit,在运算时会用到。我把运算分成了两大类:只用一个数字运算的,如:求倒数,%,开方,平方,取正负数,(相当于单目运算符);其余的为需要两个数字做运算(运算符前和运算符后,即双目运算符)。
除了各个处理方法外我还写了一个从文本框中获取数字(把字符串转换成double型加上异常处理)的方法:getNumberFromText(),因为要多次用到,写成一个方法直接调用就行。
四、运行
- 外观已经很尽力在模仿了,嘻嘻(左图是我做的,右图是电脑上win10的计算器)
- 实现界面缩放时,所有组件同步缩放,保持界面整体风格不变:
- 正常加减乘除运算的实现比较常规,这里就只展示除法且除数为0的情况吧
- 开方运算(结果为小数时保留小数点后4位)
- 如果给负数开方是不合法的:
- 平方运算
- 求倒数:
- 求倒数分母为0是不合法的:
- 按退格键:
- 取正负:
- 小数运算:
源代码:
package 计算器;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
/**
* Created by Henry
* Date: 2019/12/18
* Time: 16:08
*/
public class Calculator implements ActionListener {
/**
* 计算器
*/
private JFrame frame = new JFrame();
//计算器上各按键的名字(从上到下,从左到右)
private String[] keys = {
"%","CE","C","Back","1⁄x","X²","√x","÷","7","8","9","X","4","5","6","-","1","2","3","+","+/-","0",".","="};
private JButton buttons[] = new JButton[keys.length]; //计算器上按键的按钮
private JTextField resultText = new JTextField("0"); //显示计算结果文本框
private boolean firstDigit = true; // 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private double resultNum = 0.0000; // 计算的中间结果
private String operator = "="; // 当前运算的运算符(按键"C"时需要将其还原为"=")
private boolean operateValidFlag = true; // 判断操作是否合法
/**
* 构造函数
*/
public Calculator() {
init(); // 初始化计算器
frame.setTitle("计算器 -- @author 程铧庆");
frame.setSize(366, 439);
frame.setLocation(500, 300);
frame.setResizable(true); // 允许修改计算器窗口的大小
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* 初始化计算器
*/
private void init() {
Color color1 = new Color(181, 181, 181); //功能键和运算符颜色
Col
版权声明:本文标题:Java实现仿win10计算器 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729476476a1202175.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论