在TAB之后验证JTextField

时间:2011-11-06 09:16:06

标签: java swing

我正在使用以下代码验证JTextFields Text1和Text2中的文本。

private void Text1KeyPressed(java.awt.event.KeyEvent evt) {
    Text1.addKeyListener(new KeyAdapter() {
          public void keyPressed(KeyEvent EVT) {
                if(EVT.getKeyCode() == EVT.VK_TAB){
                     String value = Text1.getText();
                     int l = value.length();
                     if (EVT.getKeyChar() >= '0' && EVT.getKeyChar() <= '9') {
                          Text1.setEditable(true);     
                     } else {
                          Text1.setEditable(true);
                          Text2.setEditable(false);
                          label.setText("* Enter only numeric digits(0-9)");
                     }
                 }
          }
});

当我尝试在Text1中输入错误值后输入新的正确值时,Text2仍然是不可编辑的。我错过了什么吗?

3 个答案:

答案 0 :(得分:3)

您永远不会再次Text2可编辑。在某个地方你应该有这条​​线:

Text2.setEditable(true);

答案 1 :(得分:3)

因为当您输入错误值然后验证它时,您禁用Text2字段,然后您不再在代码中启用它...

我不知道你想从你的问题中实现什么,但也许在这里添加可编辑的Text2就足够了:

               if (EVT.getKeyChar() >= '0' && EVT.getKeyChar() <= '9') {
                            Text1.setEditable(true);
                            Text2.setEditable(true);
                    }

答案 2 :(得分:3)

更好的方法是使用Number Formatter实现JFormattedTextField,允许输入小数点分隔符,负号和0-9范围内的数字,

TextComponents中进行聆听更改DocumentListener

示例here