实现要求

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 编写一款简易计算软件相关推荐

  1. 基于Java Swing编写的简易运费计算工具

    两年前给媳妇儿做的一个基于Java Swing编写的简易运费计算工具,现开源,关键是思路(https://github.com/honghailiang/FreightSystem).主要有两个部分实 ...

  2. java包裹邮费计算_GitHub - honghailiang/FreightSystem: 基于Java Swing编写的简易运费计算工具...

    FreightSystem 基于java Swing编写的运费计算系统 初始化数据 从excel中读取数据,转化为对象(只保存基础数据:序列号.始发站.目的站.省份.100kg以下(元/kg).100 ...

  3. 利用java swing编写一个简易的计算器,实现了括号,优先级,三角函数,阶乘等功能

    利用java swing编写一个简易的计算器 背景 效果图 一.默认图 二.计算三角函数 三.阶乘运算 四.常见的四则运算(实现了优先级) 代码 本文借鉴了"初识Java,实现简易计算器(带 ...

  4. 用 java swing 编写的富文本编辑器,成品小程序,拿来即可用

    这里写自定义目录标题 用 java swing 编写的富文本编辑器,成品小程序,拿来即可用 用 java swing 编写的富文本编辑器,成品小程序,拿来即可用 前言 在最开始的开始,我也一直在找一个 ...

  5. 基于Java Swing编写的运费计算系统

    基于Java Swing编写的运费计算系统,主要有两个部分实现:1)初始化数据  2)用swing绘制系统并执行业务逻辑 一.初始化数据 从excel中读取数据,转化为对象(只保存基础数据:序列号.始 ...

  6. java售票界面设计_GitHub - CoderGeshu/StationTicketingSystem: Java GUI 系统设计:使用 Java Swing 编写的铁路售票应用系统...

    StationTicketingSystem 这是一个 Java GUI 系统设计:使用 Java Swing 编写的铁路售票应用系统. 技术栈 所使用到的技术:Java Swing + Java A ...

  7. Java Swing编写udp数据传输的聊天程序demo

    Java Swing编写udp数据传输的demo 事情是这个样子的,那天上软件工程课,老师和我们说,让我们一个星期内编写出一个udp进行数据传输的聊天程序,高级软件工程那本教科书上有响应的demo,但 ...

  8. 如果用java swing编写一个五子棋(人人对战)

    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 写在前面: 大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书. 很感谢能有这样一个平 ...

  9. java swing 简单计算器_用java swing编写一个简单的计算器

    用java swing实现的一个简单的计算器:一些swing的基础应用. 注释里有详解,直接上代码: package 简易计算器; import java.awt.BorderLayout; impo ...

最新文章

  1. memcache 启动 储存原理 集群
  2. python怎么导入文件-Python文件如何引入?详解引入Python文件步骤
  3. Zabbix监控 之 OID动态索引
  4. mongodb 分组聚合_MongoDB按键值对进行聚合/分组
  5. 实例对象静态对象实例方法静态方法
  6. 问题解决:错误:unable to connect to node rabbit@localhost: nodedown
  7. 阿里云服务器 window server tomcat启动 并且关闭window防火墙 配置8080端口开放还是没用
  8. Java 编写推箱子报告_Java推箱子怎么写啊?
  9. 复数基础——数组_1
  10. 屏幕分析师确认两款iPhone 13将采用LTPO屏幕 支持120Hz刷新率
  11. OpenCV移植到ARM-Linux(Exynos4412)全过程
  12. 通过 Android SDK Manager 安装面向 Android* 模拟器插件的英特尔® 凌动™ x86 系统映像...
  13. 雅虎日本总裁:微软报价忽视了雅虎海外资产
  14. 浅读vue-router源码,了解vue-router基本原理
  15. 关于DOS和命令行的故事
  16. Idea webstorm安装主题
  17. c语言中的三角函数公式,tan三角函数公式有哪些
  18. Snagit 2019 快速截图
  19. 电视盒机顶盒搭建FTP功能,外接硬盘U盘,电脑或手机端访问
  20. 让发展中国家展示清洁能源领导力

热门文章

  1. 物联网中常见的物联通信协议
  2. 原画培训机构排名前十名,最新10大原画培训机构
  3. 四路录像,行车记录仪
  4. 沙盒软件无法使用的解决办法
  5. 从零开始做单相逆变电源(硬件)
  6. 如何只通过指针获取所指内容的大小
  7. 微信小程序在线考试系统 毕业设计(7)考试记录
  8. plc300c语言对温度的编程,S7-300PLC 模拟量温度编程
  9. v-bind:key= item index 的区别
  10. 超越芯片和AI,硬科技资本为什么越来越“硬核”?