/*
2 编写一个Java Application图形界面的程序,实现两数相减、相除的功能
(1) 在两个文本框里分别输入两个数字,单击“求差”、“求商”按钮,则在第三个文本框里显示运算结果;
(2) 当输入的不是数字或者除数为0时,要求用消息对话框向用户报错;
(3) 单击窗口右上角的“X”按钮,即关闭窗口退出
*/
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher; //Mather是一个正则表达式适配器
import java.util.regex.Pattern; // 通过Pattern的Matcher方法来返回一个Matcher对象。
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class NumTest {
private JFrame frame; //窗体
private JTextField num1; //第一个数
private JTextField num2; //第二个数
private JTextField sum;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() { //异常处理
try {
NumTest window = new NumTest();
window.frame.setVisible(true); //输出异常
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public NumTest() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame(); //窗体的创建
frame.setTitle("数学计算"); //窗体名称
frame.setBounds(100, 100, 298, 177);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
num1 = new JTextField();
num1.setBounds(10, 37, 120, 21);
frame.getContentPane().add(num1);
//num1.setColumns(10);
num2 = new JTextField();
num2.setBounds(152, 37, 120, 21);
frame.getContentPane().add(num2);
//num2.setColumns(10);
JLabel lblNewLabel = new JLabel("请输入两个数字");
lblNewLabel.setBounds(10, 12, 100, 15);
frame.getContentPane().add(lblNewLabel);
JButton btn1 = new JButton("求差");
btn1.setBounds(10, 68, 120, 23);
btn1.addActionListener(listener);
frame.getContentPane().add(btn1);
JButton btn2 = new JButton("求商");
btn2.setBounds(152, 68, 120, 23);
btn2.addActionListener(listener);
frame.getContentPane().add(btn2);
JLabel label = new JLabel("结果:");
label.setBounds(42, 104, 42, 15);
frame.getContentPane().add(label);
sum = new JTextField();
sum.setBounds(115, 101, 140, 21);
frame.getContentPane().add(sum);
sum.setColumns(10);
}
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
String numstr1 = num1.getText().trim(); //获取第一个数值
String numstr2 = num2.getText().trim(); //获取第二个数值
if (!isNumeric(numstr1)) { //判断第一个数
JOptionPane.showMessageDialog(frame.getContentPane(), "第一个数字输入不规范!", "系统信息", JOptionPane.ERROR_MESSAGE); //消息对话框
num1.setText("");
return;
}
if (!isNumeric(numstr2)) { //判断第二个数
JOptionPane.showMessageDialog(frame.getContentPane(), "第二个数字输入不规范!", "系统信息", JOptionPane.ERROR_MESSAGE); //消息对话框
num2.setText("");
return;
}
float f1 = Float.parseFloat(numstr1);
float f2 = Float.parseFloat(numstr2);
switch (e.getActionCommand()) {
case "求商":
sum.setText(f1 / f2 + "");
break;
case "求差":
sum.setText(f1 - f2 + "");
break;
default:
break;
}
}
};
public boolean isNumeric(String str) { //判断输入内容
Pattern pattern = Pattern.compile("[0-9]{1,}"); // pattern是一个编译好的正则表达式
Matcher isNum = pattern.matcher(str); //Mather是一个正则表达式适配器 通过Pattern的Matcher方法来返回一个Matcher对象。
if (!isNum.matches()) { //matcher是将整个输入序列拿去匹配
return false;
}
return true;
}
}
第二种做法
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Text2 extends JFrame
{
TextField t1=new TextField(20);
TextField t2=new TextField();
TextField t3=new TextField();
JButton btn1=new JButton("求差");
JButton btn2=new JButton("求商");
Label l1=new Label("请输入第一个数:");
Label l2=new Label("请输入第二个数:");
Label l3=new Label();
JPanel p1=new JPanel();
JPanel p2=new JPanel();
Text2()
{
setTitle("计算器");
btn1.setSize(100,50);
btn1.setBackground(Color.red);
btn2.setBackground(Color.green);
l1.setVisible(true);
btn1.addActionListener(new A());
btn2.addActionListener(new B());
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
t1.addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
}
public void focusLost(FocusEvent e) {
String str=t1.getText().trim();
if(!(t1.getText().length()==0))
{
if(!str.matches("[1-9][0-9]*"))
{
JOptionPane.showMessageDialog(null, "输入非数字,请重新输入!");
t1.setText("");
}
}
}
});
t2.addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
}
public void focusLost(FocusEvent e) {
String str=t1.getText().trim();
if(!(t2.getText().length()==0))
{
if(!str.matches("[1-9][0-9]*"))
{
JOptionPane.showMessageDialog(null, "输入非数字,请重新输入!");
t1.setText("");
}
}
}
});
/*t1.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
char c = e.getKeyChar();
if (!(c >= '0' && c <= '9')) {
JOptionPane.showMessageDialog(null, "输入非数字,请重新输入!", "请输入数字", JOptionPane.ERROR_MESSAGE);
}
}
});
t2.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
char c = e.getKeyChar();
if (!(c >= '0' && c <= '9')) {
JOptionPane.showMessageDialog(null, "输入非数字,请重新输入!", "请输入数字", JOptionPane.ERROR_MESSAGE);
}
}
});*/
setLayout(new GridLayout(2,1));
p1.setLayout(new GridLayout(3,2));
p1.add(l1);
p1.add(t1);
p1.add(l2);
p1.add(t2);
p1.add(l3);
p1.add(t3);
p2.add(btn1);
p2.add(btn2);
add(p1);
add(p2);
setSize(400,400);
setVisible(true);
}
public static void main(String []args)
{
new Text2();
}
class A implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(!(t2.getText().length()==0)&&!(t1.getText().length()==0))
{
String b=t1.getText();
String c=t2.getText();
int a=Integer.parseInt(b)-Integer.parseInt(c);
t3.setText("a-b = "+a);
l3.setText("两数之差为:");
t1.setText("\0");
t2.setText("\0");
}
else
JOptionPane.showMessageDialog(null, "请输入数据!");
}
}
class B implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(!(t2.getText().length()==0)&&!(t1.getText().length()==0))
{
String b=t1.getText();
String c=t2.getText();
int a=Integer.parseInt(b)/Integer.parseInt(c);
t3.setText("a/b = "+a);
l3.setText("两数之商为:");
t1.setText("\0");
t2.setText("\0");
}
else
JOptionPane.showMessageDialog(null, "请输入数据!");
}
}
}