java图形界面设置求商 求差

/*
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, "请输入数据!");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38347957/article/details/84580269