前言

这是博主学习完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. google 历史版本浏览器下载

    传送门: https://www.portablesoft.org/google-chrome-legacy-versions/

  2. sql server创建登录出发器后导致登录失败--解决方案

    1.选择sql server配置管理器---sql server服务--右键属性--启动参数--添加-f.-m两个参数并重启sql server服务 2.重新启动sql server以windos身份 ...

  3. linux下SS 网络命令详解

    ss命令用来显示处于活动状态的套接字信息. ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容. 但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比n ...

  4. 【RL-TCPnet网络教程】第22章 RL-TCPnet之网络协议IP

    第22章      RL-TCPnet之网络协议IP 本章节为大家讲解IP(Internet Protocol,网络协议),通过前面章节对TCP和UDP的学习,需要大家对IP也有个基础的认识. (本章 ...

  5. 贪心算法----区间覆盖问题(POJ2376)

    题目: 题目的大概意思是约翰这个农民有N条牛,这些牛可以在一天中的某个时间段可以进行工作,他想把这个时间段分成若干个片段让这些牛去进行打扫任务,你的任务是安排尽量少的牛然后可以完成分成这些片段的打扫任 ...

  6. S-CMS企建v3二次SQL注入

    S-CMS企建v3二次SQL注入 0x01 前言 继上一篇的S-CMS漏洞再来一波!首发T00ls 0x2 目录 Sql注入二次SQL注入 0x03 Sql注入 漏洞文件:\scms\bbs\bbs. ...

  7. css清除浮动的3种方式

    前言: 当不给父元素设置宽高时,父元素的宽高会被子元素的内容撑开.但当子元素设置浮动属性(float) 后, 子元素会溢出到父元素外,父元素的宽高也不会被撑开,这称之为“高度塌陷”.可以理解为使用浮动 ...

  8. ansible基础-Jinja2模版 | 测试

    一 简介 注:本文demo使用ansible2.7稳定版 Jinja2的测试语句被用来评估一个条件表达式,并且最终返回True或False,经常和「when」语句搭配使用. 测试语句和过滤器的相同点: ...

  9. [Swift]LeetCode56. 合并区间 | Merge Intervals

    Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6],[8, ...

  10. [Swift]LeetCode500. 键盘行 | Keyboard Row

    Given a List of words, return the words that can be typed using letters of alphabet on only one row' ...