实现简单的整数加减乘除四则运算
###############################################
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator {
//定义所有需要使用的全局变量
public String str="";//暂存显示屏数据
public String sign="null";//暂存符号数据
double num=0;//暂存内部运算数据
boolean change=false;//暂存内部四则运算起用
/**入口主函数
* @param args
*/
public static void main(String[] args) {
//实例化一个计算器类对象
Calculator ca=new Calculator();
//调用类内部定义的initUI()方法初始化界面
ca.initUI();
}
/** 界面初始化函数
* @param args
*/
public void initUI(){
//创建一个窗体对象
JFrame jf=new JFrame();
//设置窗体属性值
jf.setTitle("计算器");
jf.setSize(300,400);
jf.setLocation(200, 200);
jf.setDefaultCloseOperation(3);
jf.setResizable(false);
//设置背景色
//jf.setBackground(new Color(65,143,211));
//设置背景图片
ImageIcon image = new ImageIcon("images/calculator.jpg");
JLabel background = new JLabel(image);
background.setBounds(0, 0, image.getIconWidth(), image.getIconHeight());
//装有背景图片的标签添加到第二层面板上
jf.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
//将上面一层面板设为透明
JPanel contentPanel=(JPanel)jf.getContentPane();
contentPanel.setOpaque(false);
//给窗体添加一个BorderLayout管理器对象
java.awt.BorderLayout bl=new java.awt.BorderLayout();
jf.setLayout(bl);
bl.setHgap(5);//设置组件之间的水平间距
bl.setVgap(10);//设置组件之间的垂直间距
//在窗体的北部嵌套一个面板容器
JPanel northPanel=new JPanel();
northPanel.setPreferredSize(new Dimension(0,100));
northPanel.setOpaque(false);
JLabel jlb = new JLabel("计算器");
jlb.setFont(new Font("黑体",1,15));
northPanel.add(jlb );
JTextField jtx =new JTextField(17);
jtx.setPreferredSize(new Dimension(0,60));
jtx.setFont(new Font("",1,16));
northPanel.add(jtx);
jf.add(northPanel,BorderLayout.NORTH);
//给东、西、南部分别设置面板留白(设置透明后添加)
JPanel westPanel =new JPanel();
westPanel.setPreferredSize(new Dimension(20,0));
westPanel.setOpaque(false);
JPanel eastPanel =new JPanel();
eastPanel.setPreferredSize(new Dimension(20,0));
eastPanel.setOpaque(false);
JPanel southPanel =new JPanel();
southPanel.setPreferredSize(new Dimension(0,20));
southPanel.setOpaque(false);
jf.add(westPanel,BorderLayout.WEST);
jf.add(eastPanel,BorderLayout.EAST);
jf.add(southPanel,BorderLayout.SOUTH);
//创建中部面板
JPanel centerPanel=setCenterPanel(jtx);
//将中部面板添加到窗体中
jf.add(centerPanel,BorderLayout.CENTER);
//最后设置显示窗体
jf.setVisible(true);
}
/** 中部面板设置函数
* @return JPanel
*/
public JPanel setCenterPanel(JTextField jtx) {
JPanel jpa2 =new JPanel();
//设置透明色
jpa2.setOpaque(false);
//给jpa2添加一个4行5列、列距和行距分别为10和5的边框布局管理器对象
jpa2.setLayout(new GridLayout(5,4,10,5));
//依次创建并添加各个按钮对象
JButton jbmc =new JButton("cl");
jpa2.add(jbmc);
JButton jbmr =new JButton("mr");
jpa2.add(jbmr);
JButton jbms =new JButton("ms");
jpa2.add(jbms);
JButton jb11 =new JButton("←");
jpa2.add(jb11);
JButton jb7 =new JButton("7");
jb7.setFont(new Font("",1,16));
jb7.setBackground(new Color(162,171,255));
jb7.setForeground(Color.WHITE);
jpa2.add(jb7);
JButton jb8 =new JButton("8");
jb8.setFont(new Font("",1,16));
jb8.setBackground(new Color(162,171,255));
jb8.setForeground(Color.WHITE);
jpa2.add(jb8);
JButton jb9 =new JButton("9");
jb9.setFont(new Font("",1,16));
jb9.setBackground(new Color(162,171,255));
jb9.setForeground(Color.WHITE);
jpa2.add(jb9);
JButton jbpl =new JButton("+");
jpa2.add(jbpl);
JButton jb4 =new JButton("4");
jb4.setFont(new Font("",1,16));
jb4.setBackground(new Color(162,171,255));
jb4.setForeground(Color.WHITE);
jpa2.add(jb4);
JButton jb5 =new JButton("5");
jb5.setFont(new Font("",1,16));
jb5.setBackground(new Color(162,171,255));
jb5.setForeground(Color.WHITE);
jpa2.add(jb5);
JButton jb6 =new JButton("6");
jb6.setFont(new Font("",1,16));
jb6.setBackground(new Color(162,171,255));
jb6.setForeground(Color.WHITE);
jpa2.add(jb6);
javax.swing.JButton jbmi =new JButton("—");
jpa2.add(jbmi);
JButton jb1 =new JButton("1");
jb1.setFont(new Font("",1,16));
jb1.setBackground(new Color(162,171,255));
jb1.setForeground(Color.WHITE);
jpa2.add(jb1);
JButton jb2 =new JButton("2");
jb2.setFont(new Font("",1,16));
jb2.setBackground(new Color(162,171,255));
jb2.setForeground(Color.WHITE);
jpa2.add(jb2);
JButton jb3 =new JButton("3");
jb3.setFont(new Font("",1,16));
jb3.setBackground(new Color(162,171,255));
jb3.setForeground(Color.WHITE);
jpa2.add(jb3);
JButton jbmu =new JButton("×");
jpa2.add(jbmu);
JButton jb0 =new JButton("0");
jpa2.add(jb0);
JButton jbpo =new JButton(". ");
jpa2.add(jbpo);
JButton jbis =new JButton("=");
jpa2.add(jbis);
JButton jbdi =new JButton("÷");
jpa2.add(jbdi);
Calculator calculator=new Calculator();
//实例化各个事件处理类对象(参数略多)
//给各个事件源添加监听方法
InputListener il=new InputListener(calculator,jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9,jb0,jbpl,jbmi,jbmu,jbdi,jbis,jb11,jbmc,jtx);
jb1.addActionListener(il);
jb2.addActionListener(il);
jb3.addActionListener(il);
jb4.addActionListener(il);
jb5.addActionListener(il);
jb6.addActionListener(il);
jb7.addActionListener(il);
jb8.addActionListener(il);
jb9.addActionListener(il);
jb0.addActionListener(il);
jbpl.addActionListener(il);
jbmi.addActionListener(il);
jbmu.addActionListener(il);
jbdi.addActionListener(il);
jbis.addActionListener(il);
jb11.addActionListener(il);
jbmc.addActionListener(il);
return jpa2;
}
}
#######################事件处理类定义########################
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JTextField;
public class InputListener implements ActionListener {
//所有要涉及到的对象设置为此类的属性
private Calculator ca;
private JTextField jtx;
private JButton jb1;
private JButton jb2;
private JButton jb3;
private JButton jb4;
private JButton jb5;
private JButton jb6;
private JButton jb7;
private JButton jb8;
private JButton jb9;
private JButton jb0;
private JButton jbpl;
private JButton jbmi;
private JButton jbmu;
private JButton jbdi;
private JButton jbis;
private JButton jb11;
private JButton jbmc;
//利用构造函数传参(所有的按钮对象、文本框对象以及一个Calculator类对象)
public InputListener (Calculator ca,JButton jb1,JButton jb2, JButton jb3,JButton jb4,JButton jb5, JButton jb6,JButton jb7,JButton jb8, JButton jb9,JButton jb0,JButton jbpl,JButton jbmi,JButton jbmu,JButton jbdi,JButton jbis,JButton jb11,JButton jbmc,JTextField jtx) {
this.ca=ca;
this.jtx=jtx;
this.jb1=jb1;
this.jb2=jb2;
this.jb3=jb3;
this.jb4=jb4;
this.jb5=jb5;
this.jb6=jb6;
this.jb7=jb7;
this.jb8=jb8;
this.jb9=jb9;
this.jb0=jb0;
this.jbpl=jbpl;
this.jbmi=jbmi;
this.jbmu=jbmu;
this.jbdi=jbdi;
this.jbis=jbis;
this.jb11=jb11;
this.jbmc=jbmc;
}
public void actionPerformed(ActionEvent e) {
Object currKey = e.getSource();//Object为所有类的父类,创建一个Object类对象表示当前监听到的操作
//列出所有情况(所有的button分别被按下的情况)
if (currKey == jb1) { //对1做出反应
pressjb1();
} else if (currKey == jb2) { //对2做出反应
pressjb2();
} else if (currKey == jb3) { //以此类推,以下略
pressjb3();
} else if (currKey == jb4) {
pressjb4();
} else if (currKey == jb5) {
pressjb5();
} else if (currKey == jb6) {
pressjb6();
} else if (currKey == jb7) {
pressjb7();
} else if (currKey == jb8) {
pressjb8();
} else if (currKey == jb9) {
pressjb9();
} else if (currKey == jb0) {
pressjb0();
} else if(e.getSource()==jbpl) {//对+做出反应
ca.sign="add";
ca.num=Double.parseDouble(ca.str);
ca.change=true;//起标记作用,表明已经输入一个运算符了
} else if(e.getSource()==jbmi) {//对-做出反应
ca.sign="sub";
ca.num=Double.parseDouble(ca.str);
ca.change=true;
} else if(e.getSource()==jbmu) {//对*做出反应
ca.sign="mul";
ca.num=Double.parseDouble(ca.str);
ca.change=true;
} else if(e.getSource()==jbdi) {//对/做出反应
ca.sign="div";
ca.num=Double.parseDouble(ca.str);
ca.change=true;
} else if(e.getSource()==jbis) {//对按=作出反应
if(ca.sign=="null")//1,没有输入运算符(仅有数据)
jtx.setText(ca.str);//则直接输出(数据)
else if(ca.sign.equals("add"))//2,输入运算符
{
ca.num+=Double.parseDouble(ca.str);//将文本框中的字符串转为double数据类型并
ca.str=Double.toString(ca.num);//重新设置文本框的内容以字符串形式输出
jtx.setText(ca.str);
}
else if(ca.sign.equals("sub"))
{
ca.num-=Double.parseDouble(ca.str);
ca.str=Double.toString(ca.num);
jtx.setText(ca.str);
}
else if(ca.sign.equals("mul"))
{
ca.num*=Double.parseDouble(ca.str);
ca.str=Double.toString(ca.num);
jtx.setText(ca.str);
} else if(ca.sign.equals("div")) {
if(ca.num!=0) {//判断除数非零
ca.num/=Double.parseDouble(ca.str);
ca.str=Double.toString(ca.num);
jtx.setText(ca.str);
}
else {
ca.str="0";
jtx.setText(ca.str);
}
}
ca.sign="null";
} else if (e.getSource() == jb11) {
pressjb11();
} else if (e.getSource() == jbmc){
pressjbmc();
}
}
public void pressjb1 () {//对按键1作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="1";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="1";
ca.change=false;//将change置为fasle以便后面还能输入字符
}
jtx.setText(ca.str);
}
public void pressjb2 () {//对按键2作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="2";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="2";
ca.change=false;//将change置为fasle以便后面还能输入字符
}
jtx.setText(ca.str);
}
public void pressjb3 () {//对按键3作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="3";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="3";
ca.change=false;
}
jtx.setText(ca.str);
}
public void pressjb4 () {//对按键4作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="4";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="4";
ca.change=false;
}
jtx.setText(ca.str);
}
public void pressjb5 () {//对按键5作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="5";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="5";
ca.change=false;
}
jtx.setText(ca.str);
}
public void pressjb6 () {//对按键6作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="6";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="6";
ca.change=false;
}
jtx.setText(ca.str);
}
public void pressjb7 () {//对按键7作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="7";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="7";
ca.change=false;
}
jtx.setText(ca.str);
}
public void pressjb8 () {//对按键8作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="8";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="8";
ca.change=false;
}
jtx.setText(ca.str);
}
public void pressjb9 () {//对按键9作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="9";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="9";
ca.change=false;
}
jtx.setText(ca.str);
}
public void pressjb0 () {//对按键0作出反应的方法
if(ca.str.length()<16 && ca.str!="" && ca.change==false)
{
ca.str+="0";
}
else if(ca.str=="" || ca.sign!="null")
{
ca.str="0";
ca.change=false;
}
jtx.setText(ca.str);
}
public void pressjb11 () {//对按下←作出反应的方法
if(ca.str.length()>1)
{
ca.str=ca.str.substring(0,ca.str.length()-1);
jtx.setText(ca.str);
}
else if(ca.str.length()==1)
{
ca.str="0";
jtx.setText(ca.str);
}
}
public void pressjbmc() {//对清零按键做出反应的方法
//将所有变量置为初始值
jtx.setText(null);
ca.str="";
ca.sign="null";
ca.num=0;
ca.change=false;
}
}
相关推荐
java编写的计算器,能实现加减乘除。 //***该梦幻计算器与Windows附件自带计算器的标准版功能、界面相仿***// //******但还不支持键盘操作,如有需要,下一次等级将满足你**********// import java.awt.*; import ...
Java编写的计算器是一款基于Java语言开发的简单计算工具,它为用户提供基础的算术运算功能,如加、减、乘、除。这个计算器项目适用于初学者学习Java编程和GUI(图形用户界面)设计,同时也方便程序员进行快速计算。...
在"计算器第三次修改"这个文件中,很可能包含了项目的最新源代码和可能的改进。通过阅读和分析这些代码,你可以看到上述各个知识点是如何在实际项目中应用的,这对于提升Java编程技能和理解GUI应用开发过程大有裨益...
【标题】"java完整版计算器"揭示了这个项目是一个基于Java编程语言开发的计算器应用程序。在Java编程领域,创建一个计算器通常涉及到基本的GUI(图形用户界面)设计、事件监听和算术运算处理。NetBeans是一款流行的...
该项目为一个Java编写的科学计算器程序,不仅具备基本的算术运算功能(加减乘除),还扩展了多种数学函数(如平方根、倒数等)的支持,适用于Java初学者进行面向对象编程的学习。 #### 二、面向对象的设计理念 该...
中国矿业大学程序设计综合实践java四次作业第一次作业简单计算器(全部原创,至少90分) 计算器实现及拓展功能 一、 基本功能: 1. 能够完成加减乘除四则运算(整数、小数) 2. 具备清空、退格功能 一、 拓展功能: ...
Java 编写的计算器是一个基础但实用的编程项目,它展示了如何使用 Java 语言来实现一个基本的算术运算系统。这个计算器项目可以帮助学习者更好地理解面向对象编程、事件处理、控制流以及数据类型等核心 Java 知识点...
在IT领域,尤其是在软件开发中,创建一个"JAVA多功能计算器"是一项常见的练习,它能帮助开发者熟悉编程语言、算法和面向对象设计。这个项目显然旨在实现一个计算器应用,该应用不仅能执行基本的数学运算,如加法、...
【JAVA GUI 计算器】项目是一个典型的Java应用程序,它使用图形用户界面(GUI)来实现一个可编程的计算器功能。这个计算器不仅能够执行基本的数学运算,如加、减、乘、除,还能处理更复杂的数学表达式,让用户输入...
6. **状态管理**:计算器需要维护当前的计算状态,如是否在等待第二个操作数、当前的操作符是什么等。这可以通过定义变量来实现。 7. **历史记录功能**:高级计算器可能还包括历史记录功能,允许用户查看和复用之前...
本文将对一份由Java初学者编写的简单计算器程序进行分析与点评。该程序主要实现了基本的四则运算功能,包括加法、减法、乘法和除法,并通过图形用户界面(GUI)展示这些功能。接下来,我们将详细解析该程序的结构、...
【Android编写的计算器】是一个基于Android平台的个人项目,它展示了如何在移动设备上实现一个功能齐全的计算器应用。这个项目的核心在于理解Android的布局管理器以及如何利用Java语言来处理用户交互。在这个计算器...
这个计算器项目不仅展示了如何用Java编写计算功能,还涵盖了软件开发过程中的其他重要方面。源码部分揭示了如何组织和编写控制逻辑,处理用户的输入事件,并执行相应的计算操作。素材可能包括计算器的图标或者其他...
【标准计算器 - Java 编写】是一个基于Java编程语言实现的多功能计算器应用。这个计算器不仅提供了基本的数学运算,如加、减、乘、除,还能执行更复杂的计算任务,如求平方根、指数运算等。它是一个完全可运行的程序...
在本项目中,我们关注的是一个适合初学者的Android应用程序开发案例——一个简易的计算器。这个项目使用了Java编程语言,并在Android Studio集成开发环境中进行构建。以下是对这个主题的详细解析: 1. **Android ...
在本文中,我们将深入探讨如何利用Java编写这样的计算器,以及涉及的相关知识点。 首先,我们需要理解Java的基本语法和面向对象编程概念。Java是一种强类型、面向对象的语言,它的类和对象是其核心特性。对于一个...
在Android平台上,开发一款基于Java实现的计算器应用是Android Studio的常见应用场景。这款"使用Android Studio开发的基于java实现的计算器APP"展示了Android应用程序的基本架构和功能实现过程。以下是关于这个项目...
根据提供的文件信息,我们可以总结出以下关于“Java全AWT编写计算器”的相关知识点: ### 1. AWT库介绍 - **AWT (Abstract Window Toolkit)**:是Java平台早期提供的图形用户界面工具包,用于创建应用程序的用户...
Java科学计算器是一款基于Java编程语言实现的计算器应用,它提供了基本的数学运算以及科学计算功能。这个项目通常是为了教学目的或是个人练习Java编程技巧而创建的。在`JAVA_Calculator.zip`压缩包中,我们可以找到...
### Java简单计算器实现 本文将基于提供的代码片段详细介绍如何用Java实现一个简单的计算器,该计算器具备基本的数学运算功能:加、减、乘、除。此外,还将介绍相关的UI设计和事件处理机制。 #### 一、项目概述 ...