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。
这会将侦听器与字段分开,但这在当时只是一个上下文问题。
我个人将拥有一个“注册”和“注销”过程,该过程将使您可以根据需要添加或删除字段



