如果(Ftext.getText().equals(“”)&& Mtext.getText().equals(“”)&& Ltext.getText().equals(“”)&& Addtext.getText ().等于(””))
表示所有字段必须为空.有时您需要大声朗读此逻辑…
“如果字段为空AND字段为空AND字段为空…”
如果您使用|| (或)相反,这意味着如果其中任何一个字段为空,则该语句为真,例如…
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 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”方法.
这会将侦听器与字段分开,但这在当时只是一个上下文问题.
我个人将拥有一个“注册”和“注销”过程,该过程将使您可以根据需要添加或删除字段