在这个小的Swing示例中,我们演示了如何使用java.awt.event.KeyAdapter类来处理文本字段组件的键盘事件。该代码段会将在JTextField组件中键入的字符更改为大写。
此用例的更好方法是改用DocumentFilter类。请参见以下示例,如何将JTextField文本格式化为大写?
package org.nhooo.example.swing;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class UppercaseTextFieldDemo extends JFrame {
public UppercaseTextFieldDemo() throws HeadlessException {
initComponents();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new UppercaseTextFieldDemo().setVisible(true));
}
protected void initComponents() {
// 设置默认表单大小,关闭事件和布局管理器
setSize(250, 250);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));
// 为我们的演示应用程序创建标签和文本字段,然后添加
// 框架内容窗格对象的组件。
JLabel usernameLabel = new JLabel("Username: ");
JTextField usernameTextField = new JTextField();
usernameTextField.setPreferredSize(new Dimension(150, 20));
getContentPane().add(usernameLabel);
getContentPane().add(usernameTextField);
//为文本字段注册一个KeyListener。使用KeyAdapter类
// 允许我们实施我们要监听的唯一关键监听器事件,
// 在此示例中,我们使用keyReleased事件。
usernameTextField.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
textField.setText(text.toUpperCase());
}
});
}
}