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

来源:互联网 发布:iphone自动切换网络 编辑:程序博客网 时间:2024/05/31 04:04

最近 老师布置了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(){@Overridepublic 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(){@Overridepublic 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(){@Overridepublic 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的风格为NimbusUIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");//更新f窗口内所有组件的UISwingUtilities.updateComponentTreeUI(jf.getContentPane());jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点X关闭窗口jf.setLocation(400, 200); //初始化时定位jf.setResizable(false);   //禁止拖曳改变窗口大小jf.pack();               //让窗口的大小自适应jf.setVisible(true);  //显示窗口}}


2,下面是运行效果



0 0
原创粉丝点击