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

时间:2014-04-07 01:33:16

标签: java swing comparison jbutton documentlistener

嗨我非常需要一些帮助我已经搜索过jtextfield,在jbutton启用之前填充,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);
            }
           }
    });

1 个答案:

答案 0 :(得分:2)

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("")) {...

如果字段不仅包含空格,您还应该考虑使用.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添加到您指定的字段中。

另一种方法可能是某种方式&#34;验证&#34;控制器,你将传递给这个处理程序,它会调用某种&#34;验证&#34;调用change时的方法。

这会将侦听器与字段分开,但这完全取决于当时的上下文。

我个人有一个&#34;注册&#34;和&#34;取消注册&#34;允许您根据需要添加或删除字段的过程