小编典典

启用Jbutton之前要填充多个Jtextfield

java

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

     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);
            }
           }
    });

阅读 218

收藏
2020-11-23

共1个答案

小编典典

if (Ftext.getText().equals("") && Mtext.getText().equals("") && Ltext.getText().equals("") && Addtext.getText().equals(""))

表示所有字段必须为空。有时您需要大声朗读此逻辑…

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

如果您改用||(或),则意味着如果其中任何一个字段为空,则该语句true例如为…

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

您还应该考虑使用,.getText().isEmpty()或者.getText().trim().isEmpty()如果字段不应该仅包含空格。

您可能还考虑编写单个DocumentListener实现,而不是为每个字段创建一个新的匿名类。

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);
    }
}

然后,您只需创建一个实例…

FieldValidationHandler handler = new FieldValidationHandler(Ftext, Mtext, Ltext, Addtext);

现在,这种方法有点偷偷摸摸,因为它会DocumentListener自动将添加到您通过构造函数指定的字段中。

另一种方法可能是拥有某种“ Validation”控制器,您将其传递给此处理程序,并且在调用该方法时它将调用某种“ validate”方法change

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

我个人将拥有一个“注册”和“注销”过程,该过程将使您可以根据需要添加或删除字段

2020-11-23