日期:2014-05-20 浏览次数:21281 次
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* @author bzwm
*
*/
public class ConvFahrenheit {
public static void main(String[] args) {
new FahrenToCentigrade();
}
}
class FahrenToCentigrade {
private JFrame f = null;
private JPanel p = null;
private JLabel fl = null;
private JTextField ft = null;
private JLabel cl = null;
private JTextField ct = null;
private JButton b = null;
public FahrenToCentigrade() {
f = new JFrame("ConvFahrenheit");
p = new JPanel(new FlowLayout(FlowLayout.LEFT));
fl = new JLabel("ConvFahrenheit");
ft = new JTextField(5);
cl = new JLabel("centigrade");
ct = new JTextField(15);
ct.setEditable(false);
b = new JButton("Conv");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
String fahren = ft.getText();
if (fahren.matches("[+-]?\\d+(.\\d+)?")) {
if (Float.parseFloat(fahren) - 32 == 0)
try {
throw new java.lang.ArithmeticException("/ by zero");
} catch (Exception e) {
javax.swing.JOptionPane.showMessageDialog(null, "input value is illegal[/ by zero]");
e.printStackTrace();
}
//计算公式
ct.setText(String.valueOf((5.0 / 9.0 * (Float.parseFloat(fahren) - 32.0))));
}
else{
javax.swing.JOptionPane.showMessageDialog(null, "input value is illegal");
}
}
});
p.add(fl);
p.add(ft);
p.add(cl);
p.add(ct);
p.add(b);
f.getContentPane().add(p, java.awt.BorderLayout.CENTER);
f.setSize(300, 300);
f.setLocation(100, 100);
f.pack();
f.setVisible(true);
}
}
------解决方案--------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.math.BigDecimal;
public class Demo extends JFrame implements ActionListener{
private JLabel lab1=new JLabel("华氏温度");
private JLabel lab2=new JLabel("摄氏温度");
private JTextField t1=new JTextField(10); //用来输入并显示华氏温度
private JTextField t2=new JTextField(10); //用来显示摄氏温度
private JButton sure=new JButton("转换");
private JButton reset=new JButton("重置");
private String temStr1=null; //用来存储华氏温度的字符串
public Demo(){
t2.setEditable(false); //设为不可编辑状态
sure.addActionListener(this); //注册给本类监听器
reset.addActionListener(this);
Container c = this.getContentPane();
c.setLayout(new FlowLayout(FlowLayout.CENTER,20,30)); //采用流式布局
//添加所有组件
c.add(lab1);
c.add(t1);
c.add(sure);
c.add(lab2);
c.add(t2);
c.add(reset);
this.setTitle("温度转换");
this.setBounds(450,100,300,200); //设置主窗口显示的位置以及大小
this.setResizable(false); //主窗口大小固定,不可改变
this.setVisible(true); //设为可见
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //退出处理
}
public void actionPerformed(ActionEvent e){ //处理事件
if(e.getSource()==sure){ //当点击“转换”按钮时
double tem1,tem2;
try{
temStr1=t1.getText().trim(); //获取华氏温度的字符串
if(temStr1==null||temStr1.equals(""))
throw new NumberFormatException(); //获取华氏温度的值
tem1=Double.parseDouble(temStr1);
tem2=5*(tem1-32)/9; //转换为摄氏温度
//四舍五入并保留小数后的前两位
t2.setText(String.valueOf((new BigDecimal(tem2)).setScale(2,BigDecimal.ROUND_HALF_UP)));
}catch(NumberFormatException nfc){ //捕捉数据转换异常
JOptionPane.showMessageDialog(this,"请输入正确的华氏温度!","转换错误",JOptionPane.WARNING_MESSAGE);
t1.setText("");
return ;
}catch(Exception exc){
System.exit(0);
}
}
else if(e.getSource()==reset){ //当点击“重置”按钮时
//全部设为初始状态
temStr1=null;
t1.setText("");
t2.setText("");
}
}
public static void main(String args[]){
Demo mainFrame = new Demo();
}
}