Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启用Jbutton之前要填充的多个Jtextfields_Java_Swing_Comparison_Jbutton_Documentlistener - Fatal编程技术网

Java 启用Jbutton之前要填充的多个Jtextfields

Java 启用Jbutton之前要填充的多个Jtextfields,java,swing,comparison,jbutton,documentlistener,Java,Swing,Comparison,Jbutton,Documentlistener,您好,我非常需要一些帮助,我已经在jbutton启用之前搜索了要填充的Jtextfield,大多数人使用DocumentListener来确定是否正在填充Jtextfield。我尝试了DocumentListener,它可以工作,但我想要的是,在Jbutton启用之前,所有Jtextfield必须不为空。这是我的代码 Ftext.getDocument().addDocumentListener(new DocumentListener() { @Override

您好,我非常需要一些帮助,我已经在jbutton启用之前搜索了要填充的Jtextfield,大多数人使用DocumentListener来确定是否正在填充Jtextfield。我尝试了DocumentListener,它可以工作,但我想要的是,在Jbutton启用之前,所有Jtextfield必须不为空。这是我的代码

     Ftext.getDocument().addDocumentListener(new DocumentListener() {

        @Override
        public void insertUpdate(DocumentEvent e) {
            change();
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            change();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
            change();
        }

        private void change(){

            if (Ftext.getText().equals("") && Mtext.getText().equals("") && Ltext.getText().equals("") && Addtext.getText().equals("")) {
                SaveButton.setEnabled(false);
            } else {
                SaveButton.setEnabled(true);
            }
           }
    });
if(Ftext.getText().equals(“”)&&Mtext.getText().equals(“”)&&Ltext.getText().equals(“”)&&Addtext.getText().equals(“”)

表示所有字段都必须为空。有时候你需要大声地读这个逻辑

“如果字段为空且字段为空且字段为空…”

如果使用了
|
(或),则表示如果其中任何一个字段为空,则语句将为
true
,例如

if (Ftext.getText().equals("") || 
    Mtext.getText().equals("") ||
    Ltext.getText().equals("") ||
    Addtext.getText().equals("")) {...

您还应该考虑使用<代码> .GETTHETER()/ISMPUTY()/<代码>或<代码> .GETTHORE().TIMEMER(.IMPUTY)(),如果字段不应该包含空格。< /P>

您也可以考虑编写一个单代码>文档监听器< /C>实现,而不是为每个字段

创建一个新的匿名类。
public class FieldValidationHandler implements DocumentListener() {

    private List<JTextField> monitorFields;

    public FieldValidationHandler(JTextField... fields) {
        monitorFields = Arrays.asList(fields);
        for (JTextField field : monitorFields) {
            field.getDocument().addDocumentListener(this);
        }
    }

    @Override
    public void insertUpdate(DocumentEvent e) {
        change();
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        change();
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
        change();
    }

    private void change(){

        boolean enabled = true;
        for (JTextField field : monitorFields) {
            if (field.getText().trim().isEmpty()) {
                enabled = false;
                break;
            }
        }
        SaveButton.setEnabled(enabled);
    }
}
现在,这种方法有点狡猾,因为它会自动将
DocumentListener
添加到通过构造函数指定的字段中

另一种方法可能是使用某种“验证”控制器,您可以将其传递给此处理程序,当调用
change
时,它将调用某种“验证”方法

这会将侦听器与字段分开,但这只是当时的上下文问题


我个人会有一个“注册”和“取消注册”的过程,允许您根据需要添加或删除字段

谢谢您的快速响应,先生,我还是java的新手,我会尝试这个。
FieldValidationHandler handler = new FieldValidationHandler(Ftext, Mtext, Ltext, Addtext);