前言

这是博主学习完Swing后,使用Swing实现的一个简单计算器。做简单的计算器的目的是将最近所学的Swing给应用起来,写博文介绍的目的是记录做这个计算器的思路。下面将分为界面和事件两部分介绍。计算器的详细代码将在文末附上链接。

计算器的界面


菜单

使用到的控件类主要有JMenuBar JMenu JMenuItem JRadioButtonMenuItem ButtonGroup。JMenuBar指的就是一个菜单条里面要装JMenu也就是上图的编辑、查看、帮助菜单。但是我们最终操作的单元还不是菜单,而是菜单项,也就是编辑下面的复制、粘贴等。菜单项有像复制粘贴这样的普通菜单项,也有单选菜单项下拉菜单列表等。使用ButtonGroup的目的是为了使查看下面的单选菜单项每次只能选择一个。下图是计算器中的菜单内容:



显示框和输入框

界面的整体布局是使用BorderLayout,显示框和输入框使用的组件是JTextField,是放置在NORTH方位,前面博文介绍过布局得知BorderLayout布局有东南西北中五个方位但是每个方位只能放置一个组件。所以使用JPanel容器将两个组件装在一起,然后将JPanel容器放在界面的北部

按钮区

按钮区使用的组件是JButton,使用了GridBagLayout布局。GridBagLayout是一种灵活的网格布局方式,使用GridBagConstraints可以指定每个组件的所占网格的大小以及容器扩大时组件变化大小等。

	//设置按钮区的布局
private void setButtonsLayout() {
GridBagLayout gbLayout = new GridBagLayout();
buttons.setLayout(gbLayout); GridBagConstraints gbCons = new GridBagConstraints();
gbCons.fill = GridBagConstraints.BOTH;
gbCons.insets = new Insets(5, 5, 5, 5);
gbCons.weightx = 4; //组件纵向比例为3:4
gbCons.weighty = 3;
JButton jbt = null; jbt = new JButton("Backspace");
gbCons.gridx = 1;
gbCons.gridy = 0;
gbCons.gridwidth = 2; //横向占两格
buttons.add(jbt,gbCons); jbt = new JButton("CE");
gbCons.gridx = 3;
gbCons.gridy = 0;
gbCons.gridwidth = 2; //横向占两格
buttons.add(jbt, gbCons); jbt = new JButton("C");
gbCons.gridx = 5;
gbCons.gridy = 0;
gbCons.gridwidth = 1;
buttons.add(jbt, gbCons); String[] butsStr = {"MC","7","8","9","/","MR","4","5","6","*","MS","1","2","3","-","M+","0","+/-",".","+"};
int k=0;
for(int i=1;i<5;i++) {
for(int j=0;j<5;j++) {
gbCons.gridx = j;
gbCons.gridy = i;
buttons.add(new JButton(butsStr[k]), gbCons);
k++;
}
} jbt = new JButton("sqrt");
gbCons.gridx = 5;
gbCons.gridy = 1;
buttons.add(jbt, gbCons); jbt = new JButton("1/x");
gbCons.gridx = 5;
gbCons.gridy = 2;
buttons.add(jbt, gbCons); jbt = new JButton("=");
gbCons.gridheight = 2;
gbCons.gridx = 5;
gbCons.gridy = 3;
buttons.add(jbt, gbCons);
}

结果显示列表

结果显示列表使用的组件类为JListDefaultListModel。JList是列表容器,使用DefaultListModel想列表容器中添加列表项。

计算器的事件

计算器的事件主要为按钮区按钮的点击事件(点击数字按钮运算按钮后结果计算)以及结果显示列表的选择事件和一个右击弹出菜单的鼠标右击事件。

小结

整个计算器的运算规则是仿造win10系统自带的计算器实现的,其中sqrt运算没有实现,以及+/-符号替换没有实现,有待补充,其余基本的还是已经实现。事件的处理机制,在AWT/Swing——事件处理中已经介绍过,这里我就不再重复说啦。关于界面和事件是如何设置的代码没有详细分析,下面会贴上源码网址,详细的解释都在代码注释中。

简单计算器源码地址:https://github.com/Sakuraxx/SimpleCalculator

Swing——简单的计算器的更多相关文章

  1. 01.Java 开发简单的计算器

    难度为一般,适合具有 Java 基础和 Swing 组件编程知识的用户学习一. 实验介绍1.1 实验内容本次实验利用Java开发一个可以进行简单的四则运算的图形化计算器,会使用到 Java Swing ...

  2. js制作简单的计算器

    学着做了一个简单的计算器!记录记录!哈哈 <!DOCTYPE html> <html> <head> <title>简单的计算器</title&g ...

  3. 留念 C语言第一课简单的计算器制作

    留念 C语言第一课简单的计算器制作 学C语言这么久了.  /* 留念 C语言第一课简单的计算器制作 */   #include<stdio.h>  #include<stdlib.h ...

  4. jsp学习---使用jsp和JavaBean实现超简单网页计算器

    一.需求 如题,用jsp实现一个超简单的网页计算器. 二.实现 1.效果图 1)初始界面: 2)随便输入两个数进行相乘: 3)当除数为零时提示报错: 2.代码 Calculator.java pack ...

  5. JS实现一个简单的计算器

    使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...

  6. javascript 简单的计算器

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  7. 教学项目之-通过Python实现简单的计算器

    教学项目之-通过Python实现简单的计算器   计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/ ...

  8. HDU1237 简单的计算器 【堆】+【逆波兰式】

    简单的计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  9. 使用qt制作一个简单的计算器

    前言:今天使用qt制作了一个很简单的计算器,觉得挺有意思的,所以在这里跟大家分享一下. 这里先跟大家说说使用到的函数: 一.槽连接函数 connect(信号发送者,发送的信号,信号接收者,信号接收者的 ...

随机推荐

  1. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习4

    #include <iostream> using namespace std; const int strsize=30; const int BOPSIZE=5; void showm ...

  2. Makefile = ?= := 区别 $@,$^,$<

    = 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 1.“=” make会将整个makefile展开后,再决定变量的值.也就是说,变量的值将会是整 ...

  3. DIV滚动条滚动到指定位置(jquery的position()与offset()方法区别小记)

    相对浏览器,将指定div滚到到指定位置,其用法如下 $("html,body").animate({scrollTop: $(obj).offset().top},speed); ...

  4. c++实验二

    1.函数重载编程练习编写重载函数add(),实现对int型,double型,Complex型数据的加法 #include<iostream> using namespace std; st ...

  5. node.js搭建Web服务器

    Node.js 博客搭建 一. 学习需求 Node 的安装运行 会安装node,搭建node环境 会运行node. 基础模块的使用 Buffer:二进制数据处理模块 Event:事件模块 fs:文件系 ...

  6. postman run之前需要手动调整顺序

    最近刚入坑postman,记录下遇到的坑: 1.先用postman interceptor录制好脚本,在postman中,将History的脚本导入Collections,由于项目接口之间需要toke ...

  7. TechEmpower最新一轮的性能测试出炉,ASP.NET Core依旧表现不俗

    TechEmpower在10月30发布最新一轮(Round 17)针对“Web Framework Benchmarks”的性能测试报告,ASP.NET Core依旧表现不俗,在一些指标上甚至是碾压其 ...

  8. React Native 0.50版本新功能简介

    React Native在2017年经历了众多版本的迭代,从接触的0.29版本开始,到前不久发布的0.52版本,React Native作为目前最受欢迎的移动跨平台方案.虽然,目前存在着很多的功能和性 ...

  9. Linux安装Gradle

    Linux安装Gradle   Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动化构建工具.在github上,gradle项目很多,有的是gra ...

  10. 【DFS】素数环问题

    题目: 输入正整数n,对1-n进行排列,使得相邻两个数之和均为素数,输出时从整数1开始,逆时针排列.同一个环应恰好输出一次.n<=16 如输入: 6 输出: 1 4 3 2 5 6 1 6 5 ...