Java Swing 编写一款简易计算软件
实现要求
1、使用Java图形界面组件设计软件,界面如图所示。
2、软件能够满足基本的“加、减、乘、除"等运算要求。
3、程序代码清晰,语法规范,结构合理,逻辑正确。
4、编辑菜单中包括“复制和粘贴"两个菜单项,为菜单项编写事件代码。
实现代码:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Calculator extends JFrame {// 显示计算器按钮的值和计算后的值JTextField display;JPanel panel1;// 面板1,放文本框JPanel panel2;// 面板2,放按钮String nowButton;// 当前按下的变量public Calculator() {this.setBounds(0, 0, 500, 500);this.setLocationRelativeTo(null);// 让窗口在屏幕中间显示setTitle("计算器");// 菜单栏JMenuBar menuBar = new JMenuBar();// 创建一个菜单栏JMenu editMenu = new JMenu("编辑(E)");// 创建一级菜单//创建 "编辑" 一级菜单的子菜单JMenuItem copyMenuItem = new JMenuItem("复制");JMenuItem pasteMenuItem = new JMenuItem("粘贴");// 子菜单添加到一级菜单editMenu.add(copyMenuItem);editMenu.add(pasteMenuItem);//将一级菜单添加到菜单栏menuBar.add(editMenu);//将菜单栏添加到JFrame窗口this.setJMenuBar(menuBar);// 设置 "复制" 子菜单被点击的监听器copyMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("复制 被点击");String i = display.getText();display.copy();JButton jb1 = new JButton("复制");jb1.addActionListener(this);}});// 设置 "粘贴" 子菜单被点击的监听器pasteMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("粘贴 被点击");display.paste();}});// 初始化,把文本框加在上面north里display = new JTextField("");display.setEnabled(true);add(display, BorderLayout.NORTH);// 监听操作按钮ActionListener command = new commandAction();// panel1是中间16个按钮的布局,放到布局管理器的center里panel1 = new JPanel();panel1.setLayout(new GridLayout(5, 4, 5, 5));addButton1("7", command);addButton1("8", command);addButton1("9", command);addButton1("/", command);addButton1("4", command);addButton1("5", command);addButton1("6", command);addButton1("*", command);addButton1("1", command);addButton1("2", command);addButton1("3", command);addButton1("-", command);addButton1("0", command);addButton1("+/-", command);addButton1(".", command);addButton1("+", command);addButton1("1/x", command);addButton1("%", command);addButton1("sqrt", command);addButton1("=", command);add(panel1, BorderLayout.SOUTH);// panel2是下面的backspace和c的2个的布局,放到布局管理器的south里panel2 = new JPanel();panel2.setLayout(new GridLayout(1, 2, 5, 5));addButton2("BackSace", command);addButton2("C", command);add(panel2, BorderLayout.CENTER);pack(); // 根据组件大小自动调节窗口大小}// 注册事件监听器方法(panel1的)public void addButton1(String label, ActionListener listener) {// TODO 自动生成的方法存根JButton button = new JButton(label);button.addActionListener(listener);panel1.add(button);}// 注册监听器方法(panel2的)private void addButton2(String label, ActionListener listener) {// TODO 自动生成的方法存根JButton button = new JButton(label);button.addActionListener(listener);panel2.add(button);}// 创建内部类,作用于单击按钮执行命令的监听器class commandAction implements ActionListener {@Overridepublic void actionPerformed(ActionEvent event) {// TODO 自动生成的方法存根nowButton = event.getActionCommand();if (nowButton != "BackSace" && nowButton != "=") {// 如果是回退和=就不打印这个了display.setText(display.getText() + nowButton);}if (nowButton.equals("=")) {// 如果是等于号,就计算结果display.setText(jisuan1(display.getText()));}if (nowButton.equals("BackSace")) {// 回退一个字符StringBuffer sb = new StringBuffer(display.getText());display.setText(sb.substring(0, sb.length() - 1));}if (nowButton.equals("C")) {// 清空display.setText("");}}}// 用来计算的方法public String jisuan1(String string) {StringBuffer sb = new StringBuffer(string);int commandCount = 0;// 符号数量int j = 0;// 计数器// 计算有多少个运算符,就有n+1个数字for (j = 0; j < sb.length(); j++) {if (sb.charAt(j) <= '9' && sb.charAt(j) >= '0' || sb.charAt(j) == '.') {continue;} else {commandCount++;}}// 初始化符号数组char[] command = new char[commandCount];// 初始化数字数组(用字符串表示)String[] num = new String[commandCount + 1];for (j = 0; j < num.length; j++) {num[j] = "";}// 遍历一遍,吧每个数字存进数字数组,每个符号存进符号数组int k = 0;for (j = 0; j < sb.length(); j++) {if (sb.charAt(j) <= '9' && sb.charAt(j) >= '0' || sb.charAt(j) == '.') {num[k] += sb.charAt(j);continue;} else {command[k] = sb.charAt(j);k++;}}// 计算结果double result = 0;for (int i = 0; i < commandCount; i++) {// 取前两个数,和第一个操作符,运算double num1 = Double.parseDouble(num[i]);double num2 = Double.parseDouble(num[i + 1]);char cc = command[i];// 计算switch (cc) {case '+':result = num1 + num2;break;case '-':result = num1 - num2;break;case '*':result = num1 * num2;break;case '/':result = num1 / num2;break;case '%':result = num1 % num2;break;default:break;}num[i + 1] = String.valueOf(result);}return String.valueOf(result);}//主方法,运行本类,显示窗体public static void main(String[] args) {new Calculator().setVisible(true);}
}
Java Swing 编写一款简易计算软件相关推荐
- 基于Java Swing编写的简易运费计算工具
两年前给媳妇儿做的一个基于Java Swing编写的简易运费计算工具,现开源,关键是思路(https://github.com/honghailiang/FreightSystem).主要有两个部分实 ...
- java包裹邮费计算_GitHub - honghailiang/FreightSystem: 基于Java Swing编写的简易运费计算工具...
FreightSystem 基于java Swing编写的运费计算系统 初始化数据 从excel中读取数据,转化为对象(只保存基础数据:序列号.始发站.目的站.省份.100kg以下(元/kg).100 ...
- 利用java swing编写一个简易的计算器,实现了括号,优先级,三角函数,阶乘等功能
利用java swing编写一个简易的计算器 背景 效果图 一.默认图 二.计算三角函数 三.阶乘运算 四.常见的四则运算(实现了优先级) 代码 本文借鉴了"初识Java,实现简易计算器(带 ...
- 用 java swing 编写的富文本编辑器,成品小程序,拿来即可用
这里写自定义目录标题 用 java swing 编写的富文本编辑器,成品小程序,拿来即可用 用 java swing 编写的富文本编辑器,成品小程序,拿来即可用 前言 在最开始的开始,我也一直在找一个 ...
- 基于Java Swing编写的运费计算系统
基于Java Swing编写的运费计算系统,主要有两个部分实现:1)初始化数据 2)用swing绘制系统并执行业务逻辑 一.初始化数据 从excel中读取数据,转化为对象(只保存基础数据:序列号.始 ...
- java售票界面设计_GitHub - CoderGeshu/StationTicketingSystem: Java GUI 系统设计:使用 Java Swing 编写的铁路售票应用系统...
StationTicketingSystem 这是一个 Java GUI 系统设计:使用 Java Swing 编写的铁路售票应用系统. 技术栈 所使用到的技术:Java Swing + Java A ...
- Java Swing编写udp数据传输的聊天程序demo
Java Swing编写udp数据传输的demo 事情是这个样子的,那天上软件工程课,老师和我们说,让我们一个星期内编写出一个udp进行数据传输的聊天程序,高级软件工程那本教科书上有响应的demo,但 ...
- 如果用java swing编写一个五子棋(人人对战)
2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 写在前面: 大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书. 很感谢能有这样一个平 ...
- java swing 简单计算器_用java swing编写一个简单的计算器
用java swing实现的一个简单的计算器:一些swing的基础应用. 注释里有详解,直接上代码: package 简易计算器; import java.awt.BorderLayout; impo ...
最新文章
- memcache 启动 储存原理 集群
- python怎么导入文件-Python文件如何引入?详解引入Python文件步骤
- Zabbix监控 之 OID动态索引
- mongodb 分组聚合_MongoDB按键值对进行聚合/分组
- 实例对象静态对象实例方法静态方法
- 问题解决:错误:unable to connect to node rabbit@localhost: nodedown
- 阿里云服务器 window server tomcat启动 并且关闭window防火墙 配置8080端口开放还是没用
- Java 编写推箱子报告_Java推箱子怎么写啊?
- 复数基础——数组_1
- 屏幕分析师确认两款iPhone 13将采用LTPO屏幕 支持120Hz刷新率
- OpenCV移植到ARM-Linux(Exynos4412)全过程
- 通过 Android SDK Manager 安装面向 Android* 模拟器插件的英特尔® 凌动™ x86 系统映像...
- 雅虎日本总裁:微软报价忽视了雅虎海外资产
- 浅读vue-router源码,了解vue-router基本原理
- 关于DOS和命令行的故事
- Idea webstorm安装主题
- c语言中的三角函数公式,tan三角函数公式有哪些
- Snagit 2019 快速截图
- 电视盒机顶盒搭建FTP功能,外接硬盘U盘,电脑或手机端访问
- 让发展中国家展示清洁能源领导力