Java的事件处理机制之计算器实例

CalcFrame.java

package jsj.java.exam.test10;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

//知识要求:理解 应用
/**
 * 计算器窗体类
 * 分值 10分
 */
public class CalcFrame extends JFrame {

	public static final int WIDTH = 600;
	public static final int HEIGHT = 100;
	private JTextField firstNumber;
	private JTextField secondNumber;
	private JTextField result;
	private JComboBox operator;

	/**
	 * 完成计算器界面的设计
	 */
	public CalcFrame() {
		this.setTitle("小小计算器");// 直接调用从父类继承下来的方法,设置窗口的标题
		Toolkit toolkit = Toolkit.getDefaultToolkit();// 得到本机默认的工具包
		Dimension d = toolkit.getScreenSize();// 获取屏幕的尺寸
		this.setSize(WIDTH, HEIGHT);// 设置容器的宽度和高度
		this.setLocation((d.width - WIDTH) / 2, (d.height - HEIGHT) / 2);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置关闭按钮时退出程序

		JLabel prompt = new JLabel("考考你");// 创建标签
		setCharacter(prompt);

		JPanel centerPanel = new JPanel();// 创建子容器,默认的布局为FlowLayout
		firstNumber = new JTextField(10);
		setCharacter(firstNumber);
		String[] op = { "+", "-", "*", "/" };
		operator = new JComboBox(op);// 初始化下拉列表
		setCharacter(operator);
		secondNumber = new JTextField(10);
		setCharacter(secondNumber);
		//创建等号按钮
		JButton equal = new JButton(" = ");
		setCharacter(equal);
		//TODO监听等号按钮上的事件,当用户按下此按钮时,进行相应的+-*/处理
		//可以采用内部类或者匿名内部类的形式实现,可以调用下面的compute()方法
		equal.addActionListener(new ActionListener() {//--4
			
			@Override
			public void actionPerformed(ActionEvent e) {//--2
				compute();//--2
				
			}
		});
		result = new JTextField(15);// 存放结果的文本框
		setCharacter(result);
		centerPanel.add(firstNumber);
		centerPanel.add(operator);
		centerPanel.add(secondNumber);
		centerPanel.add(equal);
		centerPanel.add(result);
		this.add(prompt, "North");// this.add(prompt,BorderLayout.NORTH);这种方式也可以
		this.add(centerPanel);// 默认添加到中央区域
		this.pack();// 紧凑排列组件
		
		//TODO 设置窗体的可见性
		this.setVisible(true);//--2

	}
    
	public void setCharacter(JComponent c) {
		c.setFont(new Font("黑体", Font.BOLD, 20));
	}

	
	/**
	 * 进行运算的方法
	 */
	private void compute() {
		String first = firstNumber.getText();
		String second = secondNumber.getText();
		int firstNum = Integer.parseInt(first);
		int secondNum = Integer.parseInt(second);
		char op = ((String) (operator.getSelectedItem())).charAt(0);

		CalcBiz calcBiz = new CalcBiz ();
		String results = calcBiz.calculate(firstNum, secondNum, op);
		result.setText(results);

	}
	
	public static void main(String[] args) {
		CalcFrame calcFrame=new CalcFrame();
	}

}

CalcBiz.java

package bzu.java.exam.test10;

/**
 * 计算器的功能。
 
 */
public class CalcBiz {
	
	public String calculate(int firstNumber,int secondNumber,char op){
		String result=" ";
		switch(op){
		case '+':result=result+(firstNumber+secondNumber);break;
		case '-':result=result+(firstNumber-secondNumber);break;
		case '*':result=result+(firstNumber*secondNumber);break;
		case '/':if(secondNumber!=0)
			       result=result+(firstNumber/secondNumber);
		         else
		           result=result+"除数不能为0";
		}
		return result;
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值