1

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

2 回答 2

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

当然,您需要考虑像 Delete 这样的特殊键和像 CTRL-C 这样的组合,因此您的 KeyListener 应该更复杂。甚至可能有免费的实用程序可以为您完成大部分繁重的工作。

于 2010-09-01T22:14:45.190 回答
3

您可以使用DocumentFilter.

(编辑:这个答案最初包括我现在已经不复存在的博客上一个简单的完整示例程序的指令。)

于 2010-09-01T23:02:24.983 回答