我的尝试是:
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
char c = evt.getKeyChar();
if(c != '1' && c != '2' && c != '3' && c != '4'
&& c != '5' && c != '6' && c != '7' && c != '8'
&& c != '9' && c != '0') {
evt.consume();
}
这很奇怪,因为这是我的书给我看的。
此外,与格式化文本字段相比,这是否可行?
答案 0 :(得分:3)
永远不要将KeyListener
用于文本组件
首先,它没有考虑用户将文本粘贴到字段中时会发生什么。关键事件也可能被消费,永远不会到达你的听众
Swing有许多可能满足您需求的组件
这两个都能够限制用户输入数字,我是JSpinner
,数字范围
这些字段是后期处理,也就是说,它们将允许用户输入他们想要的内容,但会在失去焦点或用户接受值时验证值
如果您想要实时过滤,请使用DocumentFilter
,examples
答案 1 :(得分:2)
尝试将if (Mile of tests)
替换为:
if(c < '0' || c > '9')
evt.consume();
或者,更具可读性,正如azurefrog所指出的那样:
if(!Character.isDigit(c))
evt.consume();
答案 2 :(得分:1)
如果你想让退格和删除按钮运行,那么你需要把它们放在你的if语句
中<强>样品:强>
if(c != '1' && c != '2' && c != '3' && c != '4'
&& c != '5' && c != '6' && c != '7' && c != '8'
&& c != '9' && c != '0') || !(c == KeyEvent.VK_BACK_SPACE) ||
!(c == KeyEvent.VK_DELETE)){
evt.consume();
}