java netbeans在第一个为空时禁用另一个jFormattedTextField

时间:2014-04-26 05:44:29

标签: java swing jformattedtextfield

我正在使用jFormattedTextField,因为它可以轻松地格式化,而不是jTextField。我只允许数字作为输入。

案例:

我有两个jFormattedTextfield表单,让我们说它们是txtA和txtB,txtB被禁用。

当txtA为空时,始终禁用txtB。否则,当txtA不为空时,将启用txtB。

如果删除txtA中的所有输入,则应禁用txtB。

我把代码放在KeyReleased事件中。这是一段代码:

private void txtAKeyReleased(java.awt.event.KeyEvent evt) {                                 
        if(!(txtA.getText().equals(""))){
            int as = txtA.getText().length(); 
            if(as > 0){
                txtB.setEnabled(true);
            }
            else{
                txtB.setEnabled(false); 
            }
        }
        else {
            txtB.setText(null); 
            txtB.setEnabled(false); 
        }
    } 

一目了然,它有效。但是,它并没有完美地发挥作用。

当我在txtA中键入内容时,启用了txtB。

问题1:但是,如果删除txtA中的所有输入,txtB仍然启用。

问题2:txtA应仅检测数字作为输入,然后启用txtB。但是,当我在txtA中键入字母或空格时,txtB仍然启用。

令人惊讶的是,当我在JTextField中尝试它时,它完美地工作(当txtA为空时txtB被禁用)。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

  

我把代码放在KeyReleased事件中。

不要使用KeyListener。

相反,您应该使用DocumentListener。每当对文档进行更改时,它都会触发事件。阅读How to Write a Document Listener上Swing教程中的部分,了解更多信息和示例。