使用java开发简单计算器界面,并实现加、减、乘、除运算

最近 老师布置了java作业,开发一个计算器,并实现+ -  *  / 运算,我写 了一个。不知道我的思路对不对,希望路过的大神提供一点建议。一些简单的运算没有问题。问题是按照我的思路负数不知道怎么实现,也就是没有乘于一个负数,或加上一个负数,或减去一个负数,或除于一个负数的功能。为了给其他人参考方便,我把代码只写在了一个类里面。


以下是代码

package com.it.xiaojia;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
public class Demo extends JFrame {
	private JFrame jf=new JFrame("Calculator"); //窗口
	private JPanel centerPanel=new JPanel();    //中间面板
	private JPanel bottomPanel=new JPanel();    //底部面板
	
	//中间三个按钮
	private JButton Backbtn=new JButton("Back");
	private JButton CEbtn=new JButton("CE");
	private JButton Cbtn=new JButton("C");
	
	//初始化功能键
	String[] nums={"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"};
	private JButton btn7=new JButton(nums[0]);
	private JButton btn8=new JButton(nums[1]);
	private JButton btn9=new JButton(nums[2]);
	private JButton btnAdd=new JButton(nums[3]);
	private JButton btn4=new JButton(nums[4]);
	private JButton btn5=new JButton(nums[5]);
	private JButton btn6=new JButton(nums[6]);
	private JButton btnMimus=new JButton(nums[7]);
	private JButton btn1=new JButton(nums[8]);
	private JButton btn2=new JButton(nums[9]);
	private JButton btn3=new JButton(nums[10]);
	private JButton btnMultipus=new JButton(nums[11]);
	private JButton btn0=new JButton(nums[12]);
	private JButton btnDot=new JButton(nums[13]);
	private JButton btnResult=new JButton(nums[14]);
	private JButton btnDivide=new JButton(nums[15]);
	
	//单行输入文本框
	private JTextField txt=new JTextField(15);
	private List<String>lists=new ArrayList<String>(); //用来记录用户输入的数字和操作符
	
	//主函数,程序入口
	public static void main(String[] args){
		try {
			new Demo().init();
		} catch (Exception e) {
			System.out.println("程序异常终止");
			System.exit(0);   //退出虚拟机
		}
	}
	//初始化
	public void init() throws Exception{
		//使用网格布局方式
		bottomPanel.setLayout(new GridLayout(4,4,3,3)); //左右上下间隔是3
		//将功能键添加到底部面板中
		bottomPanel.add(btn7);
		bottomPanel.add(btn8);
		bottomPanel.add(btn9);
		bottomPanel.add(btnAdd);
		bottomPanel.add(btn4);
		bottomPanel.add(btn5);
		bottomPanel.add(btn6);
		bottomPanel.add(btnMimus);
		bottomPanel.add(btn1);
		bottomPanel.add(btn2);
		bottomPanel.add(btn3);
		bottomPanel.add(btnMultipus);
		bottomPanel.add(btn0);
		bottomPanel.add(btnDot);
		bottomPanel.add(btnResult);
		bottomPanel.add(btnDivide);
		
		//将中间的三个按钮添加到中间面板
		centerPanel.add(Backbtn);
		centerPanel.add(CEbtn);
		centerPanel.add(Cbtn);
		
		jf.add(txt,BorderLayout.NORTH);   //将单行文本框添加到窗口的 北部
		jf.add(centerPanel);              //将中间面板添加到窗口中间(默认是中间)
		jf.add(bottomPanel,BorderLayout.SOUTH);  //将底部面板添加到窗口的南部
		
		//为C按钮添加事件监听
		Cbtn.addActionListener(e->{
			lists.clear();    //将集合中的数据清零
			txt.setText("");  //将 文本域的 值设置为空
		});
		//为Back按钮添加事件监听         使用Lamdba表达式
		Backbtn.addActionListener(e->{
			String text=txt.getText(); //得到输入框文本
			if("".equals(text) || text.length()==1){ 
				txt.setText(""); //如果是空文本或者文本长度为1,直接设为空
				return;
			}
			if(text.length()>1){ //如果文本的长度大于1就要向前截取
				text=text.substring(0,text.length()-1);
				txt.setText(text);
			}
		});
		
		//为CE按钮添加事件监听
		CEbtn.addActionListener(e->{
			//得到输入文本框
			String text=txt.getText();
			if("".equals(text)){
				return;
			}
			if("+".equals(text) || "-".equals(text) || "*".equals(text) || "/".equals(text)){
				//表示要把+ - * /清除,所以要把集合中的第一个数也移除集合(因为用户可能点了+的时候,就点CE键,此时如果再点数字键就会出现问题)
				lists.remove(0);
			}
			txt.setText("");  //把文本直接清掉
		});
		
		//为数字按钮添加监听事件     使用匿名内部类
		ActionListener numBtnListener=new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				//得到输入文本框的内容
				String text=txt.getText();
				//判断有没有这句话 (0不能做分母,请清零后重试),如果有 ,当点击数字按钮的时候要它消失
				if("除数不能为0".equals(text)){
					txt.setText(e.getActionCommand());
					return;
				}
				//如果第一个数是0,就不能输入其他数字了,只能输入小数点了
				if("0".equals(text)){
					return;
				}
				if("".equals(text)){  //当文本域中没数据的时候,把当前点击的数字显示上去
					txt.setText(e.getActionCommand());
				}else{
					//如果当前输入框有数据,并且是操作符时,记录下该操作符
					if(text.equals("+") || text.equals("-") || text.equals("*") || text.equals("/")){
						lists.add(text);  //将操作符添加到集合中
						txt.setText("");
						text=""; //将得到的文本符空,也就是将+或-或 *或/赋空值
					}
					text+=e.getActionCommand();
					txt.setText(text);
				}
			}
		};
		//为数字注册 监听器
		btn1.addActionListener(numBtnListener);
		btn2.addActionListener(numBtnListener);
		btn3.addActionListener(numBtnListener);
		btn4.addActionListener(numBtnListener);
		btn5.addActionListener(numBtnListener);
		btn6.addActionListener(numBtnListener);
		btn7.addActionListener(numBtnListener);
		btn8.addActionListener(numBtnListener);
		btn9.addActionListener(numBtnListener);
		
		//为0按钮添加事件监听
		btn0.addActionListener(e->{
			//得到输入文本框
			String text=txt.getText();
			if("0".equals(text)){  //如果第一个数是0,不能再出现0了
				return;
			}
			//如果出现操作符,就记录下来
			if("+".equals(text) || "-".equals(text) || "*".equals(text) || "/".equals(text)){
				lists.add(text);
				text="";  //把操作符情况
			}
			text+=e.getActionCommand();
			txt.setText(text);
		});
		//为点  .按钮 添加事件监听  使用Lamdba表达式
		btnDot.addActionListener(e->{
			//得到输入文本框
			String text=txt.getText();
			if("".equals(text)){
				return;
			}
			//判断文本是否为+ - * / .
			if("+".equals(text) || "-".equals(text) || "*".equals(text) || "/".equals(text)){
				return;
			}
			//如果该数字后面已经有小数点了,那么就不能连续出现两次小数点了
			if(text.contains(".")){
				return;
			}
			text+=e.getActionCommand();
			txt.setText(text); //设置进去
		});
		
		//为+-*/添加事件监听    使用匿名内部类  
		ActionListener operationBtnListener=new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				//获取输入文本框内的内容
				String text=txt.getText();
				if("".equals(text)){
					return;
				}
				if("+".equals(text) || "-".equals(text) || "*".equals(text) || "/".equals(text)){
					return;
				}
				//将内容添加到集合中
				lists.add(text);
				//将输入框清空
				txt.setText("");
				//把按钮上面的字显示进去
				txt.setText(e.getActionCommand());
			}
		};
		//为* - + /注册监听器
		btnAdd.addActionListener(operationBtnListener);
		btnMimus.addActionListener(operationBtnListener);
		btnMultipus.addActionListener(operationBtnListener);
		btnDivide.addActionListener(operationBtnListener);
		
		//为 =按钮添加事件监听
		ActionListener resultBtnListener=new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				//判断集合中的数据
				if(lists.isEmpty()){
					return;
				}
				//获取文本输入框的内容
				String text=txt.getText();
				if("".equals(txt) || "+".equals(text) || "-".equals(text) || "*".equals(text) || "/".equals(text)){
					return;
				}
				//将其添加到集合中
				lists.add(text);
				if(lists.size()<3){
					return;
				}
				String one=lists.get(0);  //得到集合中的第一个数
				String two=lists.get(1); //得到集合中的第二个数
				String three=lists.get(2); //得到集合中的第三个数
				switch(two){
				case "+":
					double i=Double.parseDouble(one);
					double j=Double.parseDouble(three);
					txt.setText((i+j)+""); //显示结果
					break;
				case "-":
					double x=Double.parseDouble(one);
					double y=Double.parseDouble(three);
					txt.setText((x-y)+""); //显示结果
					break;
					
				case "*":
					double a=Double.parseDouble(one);
					double b=Double.parseDouble(three);
					txt.setText((a*b)+"");
					break;
				case "/":
					double k=Double.parseDouble(one);
					double h=Double.parseDouble(three);
					if(h==0){
						txt.setText("除数不能为0");
						lists.clear();
						return;
					}
					txt.setText((k/h)+"");
					break;
				}
				//将集合中的数据清空
				lists.clear();
			}
		};
		//为=等号按钮注册监听器
		btnResult.addActionListener(resultBtnListener);
		//自定义窗口的图标
		ImageIcon image=new ImageIcon("image/girl.jpg"); //图片位置
		image.setImage(image.getImage().getScaledInstance(30,30,Image.SCALE_DEFAULT));
		jf.setIconImage(image.getImage());
		//设置UI的风格为Nimbus
		UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
		//更新f窗口内所有组件的UI
		SwingUtilities.updateComponentTreeUI(jf.getContentPane());
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点X关闭窗口
		jf.setLocation(400, 200); //初始化时定位
		jf.setResizable(false);   //禁止拖曳改变窗口大小
		jf.pack();               //让窗口的大小自适应
		jf.setVisible(true);  //显示窗口
	}
}


2,下面是运行效果



  • 20
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java课程设计实训大作业:记事本+简易计算器+聊天系统+日历+中英查询 基础任务一:设计日历软件 根据如下图,综合运用GUI编程、事件处理、Calendar类应用等知识设计一款月历,要求能通过输入(或选择)年月的方式正确显示当前月份的所有日期。 基础任务二:设计中英查询软件 根据Java面向对象程序设计相关理论,及GUI编程、事件处理、数据库编程等技术,设计一个如下图所示的“中英文释义查询”程序。输入英文单词,查询数据库将对应的中文显示在下框中;输入中文,查询数据库将对应的英文单词显示在下框中。 提升任务三:设计简易记事本软件 1.使用Java图形界面组件设计记事本软件的界面,参考如图所示。 2.程序代码规范,逻辑正确,能够正常运行。 3.“文件”菜单,包括“新建”、“打开”、“保存”、“另存为”和“退出”等功能。 提升任务四:设计简易计算器软件 1.使用Java图形界面组件设计软件,界面如图所示。 2.软件能够满足基本的“、乘、除”等运算要求。 3.程序代码清晰,语法规范,结构合理,逻辑正确。 进阶任务五:自选主题开发一个应用软件(如在线聊天系统,学籍管理系统等)下面给的软件界面只是参考,同学们可以根据自己的想法进行设计。 1.软件界面美观、功能完善软件,导航清晰,操作方便,使用菜单栏、工具栏、布局管理器、按钮、表格等多种Java图形界面组件。 2.程序代码清晰,语法规范,结构合理,逻辑正确。 3.功能完善,程序代码优化,执行效率高,具有较好可维护性和可扩展性。 4.软件功能设计具有一定的难度和创意。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值