我试图在按键上从JTextField检索值,如果值是整数则执行某些操作,如果值不是整数则清除字段。每次尝试检索值时,我都会得到在此之前输入的值(如果输入12则返回1,如果输入123则返回12),当我尝试清除无效字符的字段时,除了无效字符被清除了吗?
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");
}
}
}
});
}
答案 0 :(得分:0)
您可以执行以下操作:
public static boolean validateNumber(char num){
return (num >= '0' && num <='9');
}
然后使用参数KeyEvent“ e”:
if(!validateNumber(e.getKeyChar()))
e.consume();
而不是使用
public void keyTyped(KeyEvent e){
使用
public void keyReleased(KeyEvent e){
我想您会得到您所需要的,希望我对您有所帮助;)
答案 1 :(得分:0)
Swing 组件使用 Model-View-Controller (MVC)[软件]设计模式/体系结构。 模型保存数据。对于JTextField
,数据是它显示的文本。 JTextField
的默认模型是PlainDocument,但是JTextField
代码实际上是指Document
实现的PlainDocument
接口。
查看类getText()
中的方法JTextComponent
的代码(它是JTextField
的超类),您将看到它从Document
中检索文本。
在JTextField
中键入键时,字符将传递到Document
。看来您的keyTyped()
方法在输入的字符到达Document
之前被调用,因此,当您在getText()
方法中调用keyTyped()
时,那么除了最后输入的字符外,您还能获得所有文本。
这是不不使用KeyListener
来验证输入到JTextField
中的文本的原因之一。 tenorsax 在他对您的问题的评论中提供了指向该问题的链接,详细说明了正确的方法。
除了DocumentFilter或JFormattedTextField(甚至是InputVerifier)之外,您还可以add到ActionListener
到JTextField
在JTextField
中按 Enter 。您将找到许多有关如何实现上述每个选项的在线示例,包括 tenorsax 注释中提供的链接。