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() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("复制  被点击");
				String i = display.getText();
				display.copy();

				JButton jb1 = new JButton("复制");
				jb1.addActionListener(this);
			}
		});
		// 设置 "粘贴" 子菜单被点击的监听器
		pasteMenuItem.addActionListener(new ActionListener() {
			@Override
			public 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 {
		@Override
		public 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计算器软件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java实现的计算器功能示例【基于swing组件】

    本文实例讲述了java实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.s

  • 基于Java swing组件实现简易计算器

    本文记录了笔者的第一个Java程序,基于Java抽象窗口工具(abstract window toolkit , AWT)和Swing(Swing属于Java Foundation Classes的一部分)实现的建议计算器,由于笔者经验有限,初学Java,代码略带bug,无法实现7+5×8之类式子的计算,只能实现算术运算符按从高到低的式子运算,部分代码略显冗杂,希望大家在评论区积极讨论完善代码! 计算器示意图 一.代码相关知识简介 JFrame(框架) 使用JFrame frame = new

  • Java Swing实现简单的体重指数(BMI)计算器功能示例

    本文实例讲述了Java Swing实现简单的体重指数(BMI)计算器功能.分享给大家供大家参考,具体如下: BMI,Body Mass Index,身体质量指数,是用体重公斤数 除以 身高米数平方得出的,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准. 而本文通过运用Java Swing实现了一个简单的BMI计算器.虽然现在网页上也有相应的网页应用,但是能够做出这个计算器来,还是有点成就感的,希望自己以后做出更多比这个好的应用. 最终运行效果: 功能:可以选择三个标准:中国.亚洲.WH

  • Java swing实现的计算器功能完整实例

    本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Vector; public class Calculator { String str1 = "0"; // 运算数1 初值一定为0 为了程序的安全 String str2 = "0"

  • Java Swing编写一个简单的计算器软件

    目录 实现要求 实现代码: 实现要求 1.使用Java图形界面组件设计软件,界面如图所示. 2.软件能够满足基本的"加.减.乘.除"等运算要求. 3.程序代码清晰,语法规范,结构合理,逻辑正确. 4.编辑菜单中包括"复制和粘贴"两个菜单项,为菜单项编写事件代码. 实现代码: import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; impo

  • java swing 创建一个简单的QQ界面教程

    记录自己用java swing做的第一个简易界面. LoginAction.java package com.QQUI0819; import javax.swing.*; import java.awt.event.*; //首先,编写按钮癿监听器实现类 public class LoginAction implements ActionListener { private int count=0; //当前为null,创建后指向界面输入框 private JTextField ulName;

  • 200行Java代码编写一个计算器程序

    发现了大学时候写的计算器小程序,还有个图形界面,能够图形化展示表达式语法树,哈哈;) 只有200行Java代码,不但能够计算加减乘除,还能够匹配小括号~ 代码点评: 从朴素的界面配色到简单易懂错误提示,无不体现了"用户体验"至上的设计理念:代码异常处理全面合理.滴水不漏,代码缩进优雅大方,变量命名直观易懂:再结合长度适中简单明了的注释,程序整体给人一种清新脱俗之感.背后不难看出作者对学习的热爱以及对设计的苛求,工匠精神可见一斑,真可谓是大学数据结构学以致用的典范! 实现代码如下所示:

  • Java使用定时器编写一个简单的抢红包小游戏

    目录 1.新建项目 2. 添加 计时器,按钮组件 3.抢红包业务逻辑 4.效果演示 1.新建项目 2. 添加 计时器,按钮组件 <?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:widt

  • 基于Java编写一个简单的风控组件

    目录 一.背景 1.为什么要做风控 2.为什么要自己写风控 3.其它要求 二.思路 1.风控规则的实现 2.调用方式的实现 三.具体实现 1.风控计数规则实现 2.注解的实现 四.测试一下 1.写法 2.Debug看看 一.背景 1.为什么要做风控 这不得拜产品大佬所赐 目前我们业务有使用到非常多的AI能力,如ocr识别.语音测评等,这些能力往往都比较费钱或者费资源,所以在产品层面也希望我们对用户的能力使用次数做一定的限制,因此风控是必须的! 2.为什么要自己写风控 那么多开源的风控组件,为什么

  • 用js编写的简单的计算器代码程序

    最近编写的一个简单的计算器代码程序,先给大家展示一下 分享代码如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta htt

  • 利用 Go 语言编写一个简单的 WebSocket 推送服务

    本文中代码可以在 github.com/alfred-zhong/wserver获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息都是通过短信,微信和 App 推送给用户的,现在要让登录用户在网页端也能实时接收到报警推送. 依稀记得以前工作的时候遇到过类似的需求.因为以前的浏览器标准比较陈旧,并且那时用 Java 较多,所以那时候解决这个问题就用了 Comet4J.具体的原理就是长轮询,长链接.但现在毕竟 html5 流行开来了,IE 都被 Edge 接替了,再用以前这种技术就显得过

  • java Swing组件setBounds()简单用法实例分析

    本文实例讲述了java Swing组件setBounds()简单用法.分享给大家供大家参考,具体如下: 先看API: public void setBounds(Rectangle r) 移动组件并调整其大小,使其符合新的有界矩形 r.由 r.x 和 r.y 指定组件的新位置,由 r.width 和 r.height 指定组件的新大小 参数: r - 此组件的新的有界矩形 从API来看,该方法的作用相当于setLocation()与 setSize()的总和.在实际使用时,需将容器的layout

  • 使用原生js编写一个简单的框选功能方法

    今天我们来聊一下怎么使用原生javascript编写一个简单的框选功能. 需求描述 鼠标左键按下不放,移动鼠标出现矩形选框: 鼠标左键松开,根据上边出现的矩形选框统计选框范围内的DOM元素: 嗯...上边的功能描述看着是挺简单的,但实现起来也还是会有些地方需要斟酌思考的.比如,如果我们的框选范围不是document.body,而是某一个div里边进行框选呢?而现实开发过程中,我们会遇上的应该就是第二种情况. 点击查看完整的源码 怎么实现 二话不说,咱们动手写代码吧!因为更好的兼容性,这里就避免了

  • 使用C++ MFC编写一个简单的五子棋游戏程序

    MFC简介: MFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数. MFC除了是一个类库以外,还是一个框架,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll.xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的

随机推荐