如何拦截转到 Java Swing JTextField 的键盘敲击?
Posted
技术标签:
【中文标题】如何拦截转到 Java Swing JTextField 的键盘敲击?【英文标题】:How to intercept keyboard strokes going to Java Swing JTextField? 【发布时间】:2011-04-07 01:10:58 【问题描述】:JTextField 是一个初始化为零的计算器显示,显示带有前导 0 的十进制数字(如 0123 或 00123)是一种不好的形式。NetBeans Swing JFrame 中的数字按钮 (0..9) 使用 append() [下面] 删除前导零,但用户可能更喜欢键盘而不是鼠标,并且还需要处理非数字字符。
private void append(String s)
if (newEntry)
newEntry = false;
calcDisplay.setText(s);
else if (0 != Float.parseFloat(calcDisplay.getText().toString()))
calcDisplay.setText(calcDisplay.getText().toString() + s);
【问题讨论】:
【参考方案1】:您可以通过添加自定义 KeyListener 来限制输入到 JTextField 的字符。下面是一个演示这个想法的简单示例:
myTextField.addKeyListener(new KeyAdapter()
@Override
public void keyTyped(KeyEvent e)
char c = e.getKeyChar();
if (!Character.isDigit(c))
e.consume(); // Stop the event from propagating.
);
当然,您需要考虑像 Delete 这样的特殊键和像 CTRL-C 这样的组合,因此您的 KeyListener 应该更加复杂。甚至可能有免费的实用程序可以为您完成大部分繁重的工作。
【讨论】:
帮助很大。非常感谢。 DocumentFilter 建议是可行的方法。这是在 JDK4 中添加到 Swing 的,并且是使用 KeyEvents 的首选方法。您对 CTRL-C 的评论是过滤器更好的原因之一。【参考方案2】:您可以使用DocumentFilter
来做到这一点。
(编辑:这个答案最初包括对我现在已不存在的博客上一个简单的完整示例程序的要求。)
【讨论】:
汤姆。该链接作为一个未格式化的长行有点难以阅读。 试图将其作为 Windows 文本文件读取?我认为写字板应该处理它,但记事本不会。 Windows 上的 Chrome 显示正确; IE 没有。我会链接到描述它的博客条目,但我在 google 中找不到(可能 jroller 不稳定)。以上是关于如何拦截转到 Java Swing JTextField 的键盘敲击?的主要内容,如果未能解决你的问题,请参考以下文章