zoukankan      html  css  js  c++  java
  • Java实现简单的计算器

    此文转载自:https://blog.csdn.net/qq_49529322/article/details/111792238

    要求: 编写一个Java应用程序,采用GridLayout实现如下计算机器的布局及做相应的事件处理

    代码实现(本需求完全有个人实现):

    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.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    @SuppressWarnings("serial")
    class MyComputerWin extends JFrame implements ActionListener {
    	JTextField expressText;  //创建一个单行文本框引用
    	JPanel numPanel, operPanel;// 创建两个面板引用
    	JPanel panel; //创建一个面板用于存放文本框与"="按钮。
    	//创建按钮数组用于存放按钮,并定义数组的长度
    	JButton[] numBtn = new JButton[12];
    	JButton[] operBtn = new JButton[6];
    	String express = "";
    
    	public void init() {
    		expressText = new JTextField(1); //实例化单行文本框对象
    		//实例化面板对象
    		numPanel = new JPanel(); 
    		operPanel = new JPanel();
    		panel = new JPanel();
    		//设置面板为网格布局(GridLayout),  注意: 默认是流动布局(FlowLayout)
    		panel.setLayout(new BorderLayout());
    		numPanel.setLayout(new GridLayout(4, 3));
    		operPanel.setLayout(new GridLayout(5, 1));
    		//将数字按钮添加到数字面板上
    		for (int i = 0; i < numBtn.length; i++) {
    			//创建数字按钮
    			if(i>=0&&i<=2) {
    				numBtn[i] = new JButton(""+(7+i));
    			}else if(i>=3&&i<=5) {
    				numBtn[i] = new JButton(""+(i+1));
    			}else if(i>=6&&i<=8) {
    				numBtn[i] = new JButton(""+(i-5));
    			}else {
    				numBtn[9] = new JButton(""+"00");
    				numBtn[10] = new JButton(""+"0");
    				numBtn[11] = new JButton(""+"^");
    			}
    			numPanel.add(numBtn[i]);
    			numBtn[i].addActionListener(this);
    			
    		}
    		//设置符号按钮
    		operBtn[0] = new JButton("%");
    		operBtn[1] = new JButton("/");
    		operBtn[2] = new JButton("*");
    		operBtn[3] = new JButton("-");
    		operBtn[4] = new JButton("+");
    		operBtn[5] = new JButton("=");
    		//将符号按钮添加到符号面板上
    		for (int i = 0; i < operBtn.length-1; i++) {
    			operPanel.add(operBtn[i]);
    			operBtn[i].addActionListener(this);
    		}
    		panel.add(expressText);
    		panel.add(operBtn[5],BorderLayout.EAST);
    		operBtn[5].addActionListener(this);
    		
    
    		//将文本框添加到窗口上,并设置为边界布局
    		this.add(panel, BorderLayout.NORTH);
    		//将面板添加到窗口上
    		this.add(numPanel, BorderLayout.CENTER);
    		this.add(operPanel, BorderLayout.EAST);
    	}
    
    	public MyComputerWin(String title) {
    		super(title);
    		init();
    		this.setVisible(true);
    		this.setSize(300, 300);
    		this.setLocationRelativeTo(null);
    		this.expressText.setBackground(Color.YELLOW);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		String s = e.getActionCommand();  //获得发生该事件的相关命令,在这里就是获得按钮事件上的数字。
    		express += s; //将获得的命令保存起来
    		expressText.setText(express); //将获得的命令放入文本框中。
    		//因为s代表的是单个按钮事件上的命令,所以这里判断s获得的命令是不是"="。
    		if ("=".equals(s)) {
    			String[] nums = express.split("\p{Punct}");// 5+6= 正则表达式 \p{Punct}代表的是标点符号,这里就是通过标点符号(+,-,*,/.....)来进行分割,然后得到我们想要计算的数字。
    		    String[] opers =express.split("\d+"); //利用正则表达式中的多位数字来进行分解。然后得到我们想要的运算符号
    			String oper=opers[1]; //定义一个String类型的变量存储符号
    			double num1=Integer.parseInt(nums[0]);
    			double num2=Integer.parseInt(nums[1]);
    		    double result=1;
    		    switch(oper) {
    			    case "+":express+=num1+num2;break;
    			    case "-":express+=num1-num2;break;
    			    case "*":express+=num1*num2;break;
    			    case "/":if(num2!=0) {
    			    	express+=num1/num2;
    			    	}else {
    			    		express+="分母为0,不能计算!!";
    			    	} break;
    			    case "%":express+=num1/100*num2;break;
    			    case "^":for(int i=0;i<num2;i++) {
    			    			result*=num1;
    			    		} 
    			    	express+=result;break;
    		    }
    		    //express+=result;
    		    expressText.setText(express);
    		    express="";  //计算完之后将数据清空
    		}
    	}
    
    }
    
    public class MyComputer {
    
    	public static void main(String[] args) {
    		new MyComputerWin("我的计算器");
    	}
    }
    
       

    更多内容详见微信公众号:Python测试和开发

    Python测试和开发

  • 相关阅读:
    java list随机截取(洗牌)
    LINUX安装Docker及Portainer可视化界面
    总结一些选题
    深入理解BIO、NIO、AIO
    InnoDB和MyISAM存储引擎的区别
    MyBatis的解析和运行原理
    [杂项/无聊向]《美食大战老鼠》强卡最优策略搜索代码(非玩家勿入)
    CSP 2019 游记
    NOI 2019 游记
    Comet OJ
  • 原文地址:https://www.cnblogs.com/phyger/p/14205283.html
Copyright © 2011-2022 走看看