繁体   English   中英

如何截取进入Java Swing JTextField的键盘笔触?

[英]How to intercept keyboard strokes going to Java Swing JTextField?

JTextField是一个计算器显示,已初始化为零,并且以十进制数字形式显示前导0(如0123或00123)是一种不好的形式。NetBeansSwing 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);
    }
}

您可以通过添加自定义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做到这一点。

这是一个简单的完整示例程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM