Java 输入不正确字符时清除文本字段有困难
我试图从按键上的JTextField中检索值,如果值是整数,则执行一些操作,如果值不是整数,则清除该字段。每次我尝试检索该值时,我都会获取在此之前输入的值(如果我输入12,则返回1,如果我输入123,则返回12),并且当我尝试清除无效字符上的字段时,除了无效字符之外的所有内容都会被清除Java 输入不正确字符时清除文本字段有困难,java,swing,keylistener,Java,Swing,Keylistener,我试图从按键上的JTextField中检索值,如果值是整数,则执行一些操作,如果值不是整数,则清除该字段。每次我尝试检索该值时,我都会获取在此之前输入的值(如果我输入12,则返回1,如果我输入123,则返回12),并且当我尝试清除无效字符上的字段时,除了无效字符之外的所有内容都会被清除 public void setUpListeners() { JTextField jT [] = myV.getTextFields(); jT[0].addKeyListener(new K
public void setUpListeners()
{
JTextField jT [] = myV.getTextFields();
jT[0].addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
int id = e.getID();
if (id == KeyEvent.KEY_TYPED)
{
char c = e.getKeyChar();
try
{
//check if chars entered are numbers
int temp = Integer.parseInt(String.valueOf(c));
String tempS = jT[0].getText();
System.out.println(tempS);
}
catch(Exception ex)
{
jT[0].setText("");
System.out.println("Not an integer");
}
}
}
});
}
您可以执行以下操作:
public static boolean validateNumber(char num){
return (num >= '0' && num <='9');
}
而不是使用
public void keyTyped(KeyEvent e){
使用
我想你会得到你所需要的,我希望我帮助过你;) Swing组件使用模型视图控制器(MVC)[软件]设计模式/架构。模型保存数据。对于JTextField
,数据是它显示的文本。JTextField
的默认模型是,然而JTextField
code实际上指的是Document
接口,该接口由PlainDocument
实现
查看类JTextComponent
(它是JTextField
的超类)中方法getText()
的代码,您将看到它从文档中检索文本
当您在JTextField
中键入一个键时,该字符将被传递到文档
。似乎在键入的字符到达文档之前调用了keyTyped()
方法,因此,在keyTyped()
方法中调用getText()
时,除了键入的最后一个字符之外,还将获得所有文本
这是不使用键侦听器来验证输入JTextField
的文本的原因之一。正确的方法在tenorsax对您的问题的评论中提供了链接的问题中有详细说明
除了或(甚至)之外,您还可以将ActionListener
发送到JTextField
,当您在JTextField
中按Enter键时,将执行该命令。您会发现许多关于如何实现这些选项的在线示例,包括tenorsax comment中提供的链接。不要使用KeyListener
,请参阅以了解使用DocumentFilter.
或JFormattedTextField
的更好实现方法。不要使用文本字段<代码>新JSpinner(新喷丝头型号(5,0100,1))
对最终用户更友好。感谢您的回答,它现在可以完美地处理无效字符,但当我键入有效数字时,我仍然存在它落后的问题?我得到:java.lang.NumberFormatException:for input string:“对于我的第一个字符,即使它是一个数字,我也不知道为什么。在我看来,您收到的异常情况似乎是您输入的值为空“”,但随着键的释放,它应该得到修复。啊,我明白为什么了,现在非常感谢您的再次回复!非常感谢,这正是我想要帮助我理解的。
public void keyTyped(KeyEvent e){
public void keyReleased(KeyEvent e){