java awt实现计算器

在这里插入图片描述
上课老师演示了一遍他的写法,由于没给代码,因此按着他的思路撸了一遍,感觉还很简单。

代码以及解释如下:

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;

public class Caculate1 {
	static String s1="";
	static String s2="";
	static int f=9;
	static int num1=0,num2=0;
	public static void main(String[] args) {
		int x=0,y=0,z=0;
		JFrame jf=new JFrame( "我的计算器");
		jf.setBounds(0,0,300,400);
//		jf.setBackground(bgColor);
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		JTextField show=new JTextField("0");
		//此处为布局:也就是定义五个容器,(也可以理解为将定义的JFrame空间分为5个容器)
		JPanel jp1=new JPanel(new GridLayout(1,3));//存储:
		JPanel jp2=new JPanel(new GridLayout(1,3));
		JPanel jp3=new JPanel(new GridLayout(1,3));
		JPanel jp4=new JPanel(new GridLayout(1,3));
		JPanel jp5=new JPanel(new GridLayout(1,3));
		
		JButton bt_add=new JButton("+");
		JButton bt_sub=new JButton("-");
		JButton bt_mul=new JButton("*");
		JButton bt_div=new JButton("/");
		JButton bt_7=new JButton("7");
		JButton bt_8=new JButton("8");
		JButton bt_9=new JButton("9");
		JButton bt_4=new JButton("4");
		JButton bt_5=new JButton("5");
		JButton bt_6=new JButton("6");
		JButton bt_1=new JButton("1");
		JButton bt_2=new JButton("2");
		JButton bt_3=new JButton("3");
		JButton bt_0=new JButton("0");
		JButton bt_c=new JButton("C");
		JButton bt_equal=new JButton("=");
		
		jf.setLayout(new GridLayout(6,1));
		//容器1 :添加 '+','-','*','/'按钮
		jp1.add(bt_add);
		jp1.add(bt_sub);
		jp1.add(bt_mul);
		jp1.add(bt_div);
		//容器2:添加'7','8','9'按钮
		jp2.add(bt_7);
		jp2.add(bt_8);
		jp2.add(bt_9);
		//容器3:添加'4','5','6'按钮
		jp3.add(bt_4);
		jp3.add(bt_5);
		jp3.add(bt_6);
		//容器4:添加'1','2','3'按钮
		jp4.add(bt_1);
		jp4.add(bt_2);
		jp4.add(bt_3);
		//容器5:添加'0','C','='
		jp5.add(bt_0);
		jp5.add(bt_c);
		jp5.add(bt_equal);
		
		jf.add(show);
		jf.add(jp1);
		jf.add(jp2);
		jf.add(jp3);
		jf.add(jp4);
		jf.add(jp5);
//元素已经定义好了,思路也很简单:(1)JFrame定义一个大容器jf,jf=  1个显示框(show)+5个容器,分别定义显示框和容器,
		//(2)类似树形添加元素的数据结构,为jf添加元素
		
		//下面便是时间监听了(又称加载驱动)
		bt_9.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+9;
				show.setText(s1);
			}
			
		});
		
		bt_8.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+8;
				show.setText(s1);
			}
			
		});
		
		bt_7.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+7;
				show.setText(s1);
			}
			
		});
		
		bt_6.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+6;
				show.setText(s1);
			}
			
		});
		
		bt_5.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+5;
				show.setText(s1);
			}
			
		});
		
		bt_4.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+4;
				show.setText(s1);
			}
			
		});
		
		bt_3.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+3;
				show.setText(s1);
			}
			
		});
		
		bt_0.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+0;
				show.setText(s1);
			}
			
		});
		
		bt_2.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+2;
				show.setText(s1);
			}
			
		});
		
		bt_1.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+1;
				show.setText(s1);
			}
			
		});
		
		bt_0.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				
				s1=s1+0;
				show.setText(s1);
			}
			
		});
		
		
		bt_equal.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				num1=Integer.valueOf(s2);
				num2=Integer.valueOf(s1);
				int z=0;
				char fg=' ';
				
				switch(f){
				case 0:
					z=num1+num2;
					fg='+';
					break;
				case 1:
					z=num1-num2;
					fg='-';
					break;
				case 2:
					z=num1*num2;
					fg='*';
					break;
				case 3:
					fg='/';
					if(num2==0)
						num2=num2+1;
					z=num1/num2;
					break;
				default:
					break;
				}
				show.setText(s2+" "+fg+" "+s1+" = "+z);
			}
			
		});
		bt_add.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				s2=s1;
				s1="";
				f=0;
				show.setText(s2+"+");
			}
			
		});
		bt_sub.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				s2 = s1;
				s1 = "";
				f = 1;
				show.setText(s2 + " - ");
			}
		});
		bt_mul.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				s2 = s1;
				s1 = "";
				f = 2;
				show.setText(s2 + " * ");
			}
		});
		bt_div.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				s2 = s1;
				s1 = "";
				f = 3;
				show.setText(s2 + " / ");
			}
		});
		bt_c.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				s2 = "";
				s1 = "";
				num1 = 0;
				num2 = 0;
				f = 9;
				show.setText("0");
			}
		});
	}

}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Java AWT 组件可以用来实现一个简单的计算器,支持混合计算。以下是实现的步骤: 1. 创建一个 JFrame 窗口,设置布局为 BorderLayout。 2. 在窗口的顶部添加一个 JTextField 组件,用于显示计算结果。 3. 在窗口的中间添加一个 JPanel 组件,设置布局为 GridLayout,用于放置数字和运算符按钮。 4. 创建数字和运算符按钮,添加到 JPanel 中。 5. 为数字和运算符按钮添加 ActionListener,实现计算器功能。 6. 在 ActionListener 中,根据用户输入的数字和运算符,使用栈来实现混合计算。 7. 将计算结果显示在 JTextField 中。 下面是示例代码: ```java import java.awt.*; import java.awt.event.*; import java.util.Stack; import javax.swing.*; public class Calculator extends JFrame implements ActionListener { private JTextField resultField; private JPanel buttonPanel; private Stack<Double> numStack; private Stack<Character> opStack; public Calculator() { super("Calculator"); // 设置布局为 BorderLayout setLayout(new BorderLayout()); // 添加结果显示组件 resultField = new JTextField(); resultField.setEditable(false); add(resultField, BorderLayout.NORTH); // 添加按钮面板 buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(4, 4)); add(buttonPanel, BorderLayout.CENTER); // 创建数字和运算符按钮 JButton[] buttons = { new JButton("7"), new JButton("8"), new JButton("9"), new JButton("/"), new JButton("4"), new JButton("5"), new JButton("6"), new JButton("*"), new JButton("1"), new JButton("2"), new JButton("3"), new JButton("-"), new JButton("0"), new JButton("."), new JButton("="), new JButton("+") }; // 添加按钮到面板中 for (JButton button : buttons) { buttonPanel.add(button); button.addActionListener(this); } // 初始化栈 numStack = new Stack<>(); opStack = new Stack<>(); // 设置窗口大小和可见性 setSize(300, 300); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.matches("[0-9.]")) { // 处理数字输入 double num = Double.parseDouble(command); numStack.push(num); } else if (command.matches("[+\\-*/]")) { // 处理运算符输入 char op = command.charAt(0); while (!opStack.empty() && priority(op) <= priority(opStack.peek())) { double num2 = numStack.pop(); double num1 = numStack.pop(); char op1 = opStack.pop(); numStack.push(eval(num1, num2, op1)); } opStack.push(op); } else { // 处理等号输入 while (!opStack.empty()) { double num2 = numStack.pop(); double num1 = numStack.pop(); char op = opStack.pop(); numStack.push(eval(num1, num2, op)); } } // 更新结果显示 if (!numStack.empty()) { resultField.setText(numStack.peek().toString()); } } private int priority(char op) { switch (op) { case '+': case '-': return 1; case '*': case '/': return 2; default: return 0; } } private double eval(double num1, double num2, char op) { switch (op) { case '+': return num1 + num2; case '-': return num1 - num2; case '*': return num1 * num2; case '/': return num1 / num2; default: return 0; } } public static void main(String[] args) { new Calculator(); } } ``` 这个计算器可以支持混合计算,例如输入 "2+3*4/2",结果会显示为 "8.0"。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr顺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值