Multiple Jtextfields to be filled before Jbutton enable

女生的网名这么多〃 提交于 2019-12-19 11:26:48

问题


Hi I badly need some help I already search about Jtextfield to be filled before jbutton enables, DocumentListener most people use to determined if Jtextfield is being populated. I tried DocumentListener and it works but all I want is all Jtextfield must be not empty before the Jbutton enables here is my code.

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

回答1:


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

Means that all the fields must be empty. Some times you need to read this logic aloud...

"if field is empty AND field is empty AND field is empty..."

If you used || (or) instead, it would mean that if any one of the fields was empty the statement would be true for example...

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

You should also consider using .getText().isEmpty() or .getText().trim().isEmpty() if the fields shouldn't contain just spaces.

You might also consider writing a single DocumentListener implementation instead of creating a new anonymous class for each field

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

Then you'd just create a single instance...

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

Now, this approach is a little sneaky, in that it adds the DocumentListener to the fields you specify via the constructor automatically.

Another approach might be to have some kind "Validation" controller, that you would pass to this handler and it would call some kind of "validate" method when change was called.

This would separate the listener from the fields, but this is all a matter of context at the time.

I would personally have a "register" and "unregister" process which would allow you to add or remove fields as you need to



来源:https://stackoverflow.com/questions/22902247/multiple-jtextfields-to-be-filled-before-jbutton-enable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!