创建一个只接受单个整数输入的文本字段
Creating a text field that only accepts a single integer input
我正在尝试创建一种只允许我在文本字段中键入单个数字的方法,但是我当前的代码不起作用。即使触发了 KeyPressed 方法,它也允许我输入字母。但是,仅将输入限制为 1 个字符的代码有效。
void formatTextField(JTextField field)
{
field.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
if (field.getText().length() >= 1)
{
e.consume();
}
}
public void keyPressed(KeyEvent e)
{
try
{
String keyText = KeyEvent.getKeyText(e.getKeyCode());
Integer.parseInt(keyText);
}
catch(NumberFormatException | NullPointerException ex)
{
e.consume();
}
}
});
}
对于这种情况,如果您使用现有的解决方案会更好。你可以use JFormattedTextField or a JSpinner。无需花费 time/effort 来创建 KeyListener 或某种过滤器。
加上 JSpinner
对用户更友好,因为用户能够识别出此字段只接受数字。
如果您坚持使用JTextField
,建议您使用DocumentFilter approach, mostly described in this question.
在进一步研究之后,我发现使用 keyPressed 不是正确的方法,因为它不会 return 任何键码。在 keyTyped 方法中使用 keyChar 是一种更好的方法。我已将代码发布在这里以防有人发现它有用。
正如 George Z. 在他的回答中所说,使用 JSpinner or JFormattedTextField 可能会更好,但是如果您想使用文本字段,下面的代码将起作用。
void formatTextField(JTextField field)
{
field.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
if (field.getText().length() >= 1)
{
e.consume();
}
try
{
Integer.parseInt(String.valueOf(e.getKeyChar()));
}
catch(NumberFormatException | NullPointerException ex)
{
e.consume();
}
}
});
}
我正在尝试创建一种只允许我在文本字段中键入单个数字的方法,但是我当前的代码不起作用。即使触发了 KeyPressed 方法,它也允许我输入字母。但是,仅将输入限制为 1 个字符的代码有效。
void formatTextField(JTextField field)
{
field.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
if (field.getText().length() >= 1)
{
e.consume();
}
}
public void keyPressed(KeyEvent e)
{
try
{
String keyText = KeyEvent.getKeyText(e.getKeyCode());
Integer.parseInt(keyText);
}
catch(NumberFormatException | NullPointerException ex)
{
e.consume();
}
}
});
}
对于这种情况,如果您使用现有的解决方案会更好。你可以use JFormattedTextField or a JSpinner。无需花费 time/effort 来创建 KeyListener 或某种过滤器。
加上 JSpinner
对用户更友好,因为用户能够识别出此字段只接受数字。
如果您坚持使用JTextField
,建议您使用DocumentFilter approach, mostly described in this question.
在进一步研究之后,我发现使用 keyPressed 不是正确的方法,因为它不会 return 任何键码。在 keyTyped 方法中使用 keyChar 是一种更好的方法。我已将代码发布在这里以防有人发现它有用。
正如 George Z. 在他的回答中所说,使用 JSpinner or JFormattedTextField 可能会更好,但是如果您想使用文本字段,下面的代码将起作用。
void formatTextField(JTextField field)
{
field.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
if (field.getText().length() >= 1)
{
e.consume();
}
try
{
Integer.parseInt(String.valueOf(e.getKeyChar()));
}
catch(NumberFormatException | NullPointerException ex)
{
e.consume();
}
}
});
}