1) 创建ControlInputTest类,该类继承JFrame类,并分别编写一个main()方法和无参数的构造方法;
2) 在ControlInputTest类的无参数构造方法中添加代码,依次向窗体中添加一个标签、文本框和按钮 [先添加一个面板,再将它们加到面板上,这样实现的更接近截图中所示效果] ,再为文本框添加提示文本、焦点事件监听器和键盘事件监听器;
3) MyFocus类为ControlInputTest类的内部类,负责处理文本框的焦点事件,当文本框获得焦点时设置文本框为空,当文本框失去焦点时,如果文本框的内容为空,则为文本框设置显示的文本“请输入身份证号!”;
4) MyKey类也是ControlInputTest类的内部类,负责处理文本框的键盘事件,当用户输入的是0~9的数字时,则响应用户的输入,前提条件是输入内容的长度不能大于18;
运行时,当文本框获得焦点时,文本框将不显示任何文本信息,当光标移动到文本框上方(文本框内部)并停留一段时间时,将弹出提示文本,如图A-4所示;单击“确定”按钮后,文本框将失去焦点,如果此时在文本框中未输入任何内容,文本框将显示一段默认文本“请输入身份证号!”,如图所示。
import javax.swing.*;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Scanner;
public class ControlInputTest extends JFrame implements ActionListener {
static JFrame frm=new JFrame();
static JLabel label=new JLabel("身份证号:");
static JButton jb=new JButton("确定");
static JTextField text =new JTextField();
JTextField tip =new JTextField("身份证号只能是15位号或18位号的数字");
//main
public static void main(String[] args) {
ControlInputTest ci =new ControlInputTest();
}
//窗口
public ControlInputTest(){
frm.setTitle("验证数据合法性");
frm.setLayout(null);
//设置标签
label.setBounds(5,5,80,40);
label.setHorizontalAlignment(JLabel.CENTER);
frm.getContentPane().add(label);
//创建文本框
text.setHorizontalAlignment(JTextField.CENTER);
text.setBounds(90,5,200,40);
frm.getContentPane().add(text);
//创建按钮
jb.setBounds(300, 5, 60, 40);
frm.getContentPane().add(jb);
//提示栏
tip.setEditable(false);
tip.setBackground(Color.gray);
tip.setBounds(100, 60, 250, 30);
frm.getContentPane().add(tip);
//监听
jb.addActionListener(this);
MyFocus my = new MyFocus();
text.addFocusListener(my);
MyKey mk=new MyKey();
text.addKeyListener(mk);
//----
frm.setBounds(400,200,380,150);
frm.setVisible(true);
}
//按钮清空
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jb)
{
}
}
//
class MyFocus implements FocusListener{
public void focusGained(FocusEvent a) {
text.setText("");
tip.setVisible(true);
}
public void focusLost(FocusEvent a) {
text.setText("请输入身份证号!");
tip.setVisible(false);
}
}
//
class MyKey implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
int keyChar=e.getKeyChar();
if(keyChar>=KeyEvent.VK_0&&keyChar<=KeyEvent.VK_9)
{
//输入1-9
}
else
e.consume();//屏蔽其他
}
}
}