如何拦截去Java Swing JTextField的键盘笔划?

时间:2010-09-01 21:51:38

标签: java swing netbeans jframe jtextfield

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);
    }
}

2 个答案:

答案 0 :(得分:5)

您可以通过添加自定义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.
    }
  }
});

当然,您需要考虑删除特殊键和CTRL-C之类的组合,因此您的KeyListener应该更复杂。甚至可以免费提供实用工具来为您完成大部分繁重的工作。

答案 1 :(得分:3)

您可以使用DocumentFilter执行此操作。

Here's一个简单的完整示例程序。