Java 如何使用KeyEvent仅允许JTextField中的数字?
我的尝试是:Java 如何使用KeyEvent仅允许JTextField中的数字?,java,swing,formatting,textfield,keyevent,Java,Swing,Formatting,Textfield,Keyevent,我的尝试是: private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) { char c = evt.getKeyChar(); if(c != '1' && c != '2' && c != '3' && c != '4' &&
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();
}
这很奇怪,因为这是我的书给我看的
此外,与格式化文本字段相比,这是否可行?尝试将
如果(测试英里数)
替换为:
if(c < '0' || c > '9')
evt.consume();
尝试将您的
if(测试英里数)
替换为:
if(c < '0' || c > '9')
evt.consume();
如果希望backspace和delete按钮正常工作,则需要将它们放在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();
}
如果希望backspace和delete按钮正常工作,则需要将它们放在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();
}
决不能将
keylister
s与文本组件一起使用
首先,它没有考虑当用户将文本粘贴到字段中时会发生什么。关键事件也有可能被消耗掉,永远无法到达您的侦听器
Swing有许多组件可以满足您的需要
JSpinner
,数字范围的例子
这些字段是后处理字段,也就是说,它们将允许用户输入他们想要的内容,但在失去焦点或用户接受该值时将验证该值
如果您想要实时过滤,您应该使用一个,对于,您不应该将
keylister
s与文本组件一起使用
首先,它没有考虑当用户将文本粘贴到字段中时会发生什么。关键事件也有可能被消耗掉,永远无法到达您的侦听器
Swing有许多组件可以满足您的需要
JSpinner
,数字范围的例子
这些字段是后处理字段,也就是说,它们将允许用户输入他们想要的内容,但在失去焦点或用户接受该值时将验证该值
如果你想要实时过滤,你应该使用一个,因为我有点困惑,为什么这样可以解决我的问题;你能解释一下吗?@Eypros不。如果我们这样做,那么0和9将被消耗,而不是被执行。@user3758041
char
s被美化(和无符号)short
s。你可以加,除,模,等等。。。它们与任何其他基元数字类型一样。这包括将它们与操作员进行比较。如果您希望完整的字符列表按顺序排列,则为1。只使用Character.isDigit(c)
而不是手动检查可能更具可读性。如果试图在一条If
语句中显式进行10次测试,您肯定会犯错误/打字错误。越短越好。通过这样清理代码,您可以使代码更具可读性,在这种情况下,速度更快;你能解释一下吗?@Eypros不。如果我们这样做,那么0和9将被消耗,而不是被执行。@user3758041char
s被美化(和无符号)short
s。你可以加,除,模,等等。。。它们与任何其他基元数字类型一样。这包括将它们与操作员进行比较。如果您希望完整的字符列表按顺序排列,则为1。只使用Character.isDigit(c)
而不是手动检查可能更具可读性。如果试图在一条If
语句中显式进行10次测试,您肯定会犯错误/打字错误。越短越好。通过这样清理代码,您可以使代码更具可读性,在这种情况下,速度更快。您当前从上述代码得到的结果是什么?它是word吗?好吧,即使这是固定的,除了不允许backspace和delete按钮发挥作用外,它也不会做任何事情。不要使用keyEvents,它们的级别太低,验证不安全(f.i无法处理粘贴的代码)。相反,使用DocumentFilter或JFormattedTextField上述代码的当前结果是什么?它是word吗?好吧,即使这是固定的,除了不允许backspace和delete按钮发挥作用外,它也不会做任何事情。不要使用keyEvents,它们的级别太低,验证不安全(f.i无法处理粘贴的代码)。相反,请使用DocumentFilter或JFormattedTextField