一个简单计算器
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;
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() {
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{
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{
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) {
new Exam_1();
}
}