1.编写键盘和焦点响应程序FocusKeyEventDemo.java。
(1)窗口放置三个文本框、一个按钮和一个标签。
(2)使用浮动布局。
(3)程序运行后,焦点放在第一个文本框。
(4)当文本框获得焦点时清空该文本框的内容(使用focusGained方法)。
(5)当文本框中输入的字符超过6个时焦点自动切换到下一个文本框(使用keyPressed方法)。
(6)按“确定”按钮后,在标签中显示完整的序列号。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class FocusKeyEventDemo {
public static void main(String[] args) {
// 创建主窗口
JFrame frame = new JFrame("输入序列号");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 150);
frame.setLayout(new FlowLayout()); // 使用浮动布局
// 创建三个文本框、一个按钮和一个标签
JTextField textField1 = new JTextField(10);
JTextField textField2 = new JTextField(10);
JTextField textField3 = new JTextField(10);
JButton confirmButton = new JButton("确定");
JLabel resultLabel = new JLabel("序列号:");
// 添加组件到窗口
frame.add(textField1);
frame.add(textField2);
frame.add(textField3);
frame.add(confirmButton);
frame.add(resultLabel);
// 设置初始焦点到第一个文本框
textField1.requestFocusInWindow();
// 添加焦点监听器,清空文本框内容
FocusListener focusListener = new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
((JTextField) e.getSource()).setText(""); // 清空内容
}
@Override
public void focusLost(FocusEvent e) {
// 不做任何处理
}
};
textField1.addFocusListener(focusListener);
textField2.addFocusListener(focusListener);
textField3.addFocusListener(focusListener);
// 添加键盘监听器,超过6个字符自动切换焦点
KeyListener keyListener = new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
JTextField textField = (JTextField) e.getSource();
if (textField.getText().length() >= 6) {
textField.transferFocus(); // 切换到下一个组件
}
}
};
textField1.addKeyListener(keyListener);
textField2.addKeyListener(keyListener);
textField3.addKeyListener(keyListener);
// 按钮监听器,显示完整序列号
confirmButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String serialNumber = textField1.getText() + textField2.getText() + textField3.getText();
resultLabel.setText("序列号:" + serialNumber);
}
});
// 设置窗口可见
frame.setVisible(true);
}
}