GUI编程之一个简单计算器

一个简单计算器

import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;    //点击按钮产生的事件
import java.awt.event.ActionListener;  //处理ActionEvent事件必须要实现的接口

class NoneException extends Exception{
	public NoneException(String msg){ super(msg);}
}
class OpCharException extends Exception{
	public OpCharException(String msg){ super(msg);}
}

class Exam_1 extends JFrame implements ActionListener{
	private JTextField op1,op2,opchar,result;
	private JPanel p1,p2;
	private JLabel t_la;
	private JButton bt_eq;
    public Exam_1() {  
    	//以下为GUI界面设计部分
		super("简单的文本计算器");
		setSize(600,200);  setBackground(Color.lightGray);
        this.setLayout(new GridLayout(2,1));
        p1=new JPanel();   p1.setLayout(new FlowLayout(FlowLayout.LEFT));
        p2=new JPanel();   p2.setLayout(new BorderLayout());
        op1=new JTextField(5);   op2=new JTextField(5);
        opchar=new JTextField(3);   result=new JTextField(10);
        t_la=new JLabel(" ");   result.setEditable(false);
        bt_eq=new JButton("=");
		p1.add(op1);   p1.add(opchar);   p1.add(op2);   p1.add(bt_eq);p1.add(result);
		p2.add(t_la);
        this.add(p1); this.add(p2);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置点击关闭按钮
        setVisible(true);
        
        bt_eq.addActionListener(this);
    }
    private double getDouble(JTextField jf,int num)throws NoneException{//检测jf是否是合法的操作数
    	String s=jf.getText().trim(); double val;
    	if(s.length()==0)throw new NoneException("错误:第"+num+"个操作数为空!");
    	try {val=Double.parseDouble(s);}
    	catch(NumberFormatException e)//写入错误信息后重新抛出
    		{ throw new NumberFormatException("错误:第"+num+"个操作数数据格式错误!"); }
    	return val;
    }
    private char getOpChar(JTextField jf)throws NoneException,OpCharException{//检测jf是否是合法的运算符
    	String s=jf.getText().trim();
    	if(s.length()==0)throw new NoneException("错误:运算符框为空!");
    	if(s.length()>1)throw new OpCharException("错误:运算符过多!");
    	if("+-*/".indexOf(s)<0)throw new OpCharException("错误:无法识别的运算符!");
    	return s.charAt(0);
    }
    private double compute(double a, double b,char op){
    	if(b==0&&op=='/') throw new ArithmeticException("错误:除零错!");
    	if(op=='+')return a+b;
    	if(op=='-')return a-b;
    	if(op=='*')return a*b;
    	if(op=='/')return a/b;
    	return -1;//此句实际上为通过编译而设置
    }
    public void actionPerformed(ActionEvent e){  //点击按钮的处理
    	if(e.getSource()==bt_eq){
			double a,b,r=0; char c;  String op1_str,op2_str;
			try{ a=getDouble(op1,1); b=getDouble(op2,2);
				 c=getOpChar(opchar);
				 r=compute(a,b,c);
				 result.setText(r+"");t_la.setText(" ");
			}
			catch(Exception x){	result.setText("");	t_la.setText(x.getMessage()); }
	    	setVisible(true);
    	}
    }
}
class App1{
	public static void main (String[] args) {
		//SetDefaultFont.setAll(new Font("宋体",Font.BOLD,30));
		new Exam_1();
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值