`
云十四月
  • 浏览: 12233 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

第六次总结(java编写简单计算器)

 
阅读更多

 实现简单的整数加减乘除四则运算

###############################################

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编写的计算器,能实现加减乘除

    java编写的计算器,能实现加减乘除。 //***该梦幻计算器与Windows附件自带计算器的标准版功能、界面相仿***// //******但还不支持键盘操作,如有需要,下一次等级将满足你**********// import java.awt.*; import ...

    java编写的计算器

    Java编写的计算器是一款基于Java语言开发的简单计算工具,它为用户提供基础的算术运算功能,如加、减、乘、除。这个计算器项目适用于初学者学习Java编程和GUI(图形用户界面)设计,同时也方便程序员进行快速计算。...

    java简易计算器(仿windows自带计算器)

    在"计算器第三次修改"这个文件中,很可能包含了项目的最新源代码和可能的改进。通过阅读和分析这些代码,你可以看到上述各个知识点是如何在实际项目中应用的,这对于提升Java编程技能和理解GUI应用开发过程大有裨益...

    java完整版计算器

    【标题】"java完整版计算器"揭示了这个项目是一个基于Java编程语言开发的计算器应用程序。在Java编程领域,创建一个计算器通常涉及到基本的GUI(图形用户界面)设计、事件监听和算术运算处理。NetBeans是一款流行的...

    java模拟科学计算器

    该项目为一个Java编写的科学计算器程序,不仅具备基本的算术运算功能(加减乘除),还扩展了多种数学函数(如平方根、倒数等)的支持,适用于Java初学者进行面向对象编程的学习。 #### 二、面向对象的设计理念 该...

    中国矿业大学程序设计综合实践java四次作业第一次作业简单计算器

    中国矿业大学程序设计综合实践java四次作业第一次作业简单计算器(全部原创,至少90分) 计算器实现及拓展功能 一、 基本功能: 1. 能够完成加减乘除四则运算(整数、小数) 2. 具备清空、退格功能 一、 拓展功能: ...

    java编写的计算器,供需要的同学学习参考

    Java 编写的计算器是一个基础但实用的编程项目,它展示了如何使用 Java 语言来实现一个基本的算术运算系统。这个计算器项目可以帮助学习者更好地理解面向对象编程、事件处理、控制流以及数据类型等核心 Java 知识点...

    JAVA多功能计算器

    在IT领域,尤其是在软件开发中,创建一个"JAVA多功能计算器"是一项常见的练习,它能帮助开发者熟悉编程语言、算法和面向对象设计。这个项目显然旨在实现一个计算器应用,该应用不仅能执行基本的数学运算,如加法、...

    JAVA 图形计算器

    【JAVA GUI 计算器】项目是一个典型的Java应用程序,它使用图形用户界面(GUI)来实现一个可编程的计算器功能。这个计算器不仅能够执行基本的数学运算,如加、减、乘、除,还能处理更复杂的数学表达式,让用户输入...

    android 编写的计算器

    6. **状态管理**:计算器需要维护当前的计算状态,如是否在等待第二个操作数、当前的操作符是什么等。这可以通过定义变量来实现。 7. **历史记录功能**:高级计算器可能还包括历史记录功能,允许用户查看和复用之前...

    java自学者编写的计算器代码

    本文将对一份由Java初学者编写的简单计算器程序进行分析与点评。该程序主要实现了基本的四则运算功能,包括加法、减法、乘法和除法,并通过图形用户界面(GUI)展示这些功能。接下来,我们将详细解析该程序的结构、...

    Android编写的计算器

    【Android编写的计算器】是一个基于Android平台的个人项目,它展示了如何在移动设备上实现一个功能齐全的计算器应用。这个项目的核心在于理解Android的布局管理器以及如何利用Java语言来处理用户交互。在这个计算器...

    利用网格布局写的一个java计算器

    这个计算器项目不仅展示了如何用Java编写计算功能,还涵盖了软件开发过程中的其他重要方面。源码部分揭示了如何组织和编写控制逻辑,处理用户的输入事件,并执行相应的计算操作。素材可能包括计算器的图标或者其他...

    标准计算器-java编写

    【标准计算器 - Java 编写】是一个基于Java编程语言实现的多功能计算器应用。这个计算器不仅提供了基本的数学运算,如加、减、乘、除,还能执行更复杂的计算任务,如求平方根、指数运算等。它是一个完全可运行的程序...

    Android APP + JAVA + 简易计算器 + 初学者开发

    在本项目中,我们关注的是一个适合初学者的Android应用程序开发案例——一个简易的计算器。这个项目使用了Java编程语言,并在Android Studio集成开发环境中进行构建。以下是对这个主题的详细解析: 1. **Android ...

    java简单的计算器

    在本文中,我们将深入探讨如何利用Java编写这样的计算器,以及涉及的相关知识点。 首先,我们需要理解Java的基本语法和面向对象编程概念。Java是一种强类型、面向对象的语言,它的类和对象是其核心特性。对于一个...

    使用Android Studio开发的基于java实现的计算器APP

    在Android平台上,开发一款基于Java实现的计算器应用是Android Studio的常见应用场景。这款"使用Android Studio开发的基于java实现的计算器APP"展示了Android应用程序的基本架构和功能实现过程。以下是关于这个项目...

    java 全awt编计算器

    根据提供的文件信息,我们可以总结出以下关于“Java全AWT编写计算器”的相关知识点: ### 1. AWT库介绍 - **AWT (Abstract Window Toolkit)**:是Java平台早期提供的图形用户界面工具包,用于创建应用程序的用户...

    JAVA_Calculator.zip_Java科学计算器_java calculator_java 计算器_科学计算器_计算器

    Java科学计算器是一款基于Java编程语言实现的计算器应用,它提供了基本的数学运算以及科学计算功能。这个项目通常是为了教学目的或是个人练习Java编程技巧而创建的。在`JAVA_Calculator.zip`压缩包中,我们可以找到...

    java 简单计算器(实现加、减、乘、除功能)

    ### Java简单计算器实现 本文将基于提供的代码片段详细介绍如何用Java实现一个简单的计算器,该计算器具备基本的数学运算功能:加、减、乘、除。此外,还将介绍相关的UI设计和事件处理机制。 #### 一、项目概述 ...

Global site tag (gtag.js) - Google Analytics