嗨,我非常需要一些帮助,我已经在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); } } });
if (Ftext.getText().equals("") && Mtext.getText().equals("") && Ltext.getText().equals("") && Addtext.getText().equals(""))
表示所有字段必须为空。有时您需要大声朗读此逻辑…
“如果字段为空AND字段为空AND字段为空…”
如果您改用||(或),则意味着如果其中任何一个字段为空,则该语句true例如为…
||
true
if (Ftext.getText().equals("") || Mtext.getText().equals("") || Ltext.getText().equals("") || Addtext.getText().equals("")) {...
您还应该考虑使用,.getText().isEmpty()或者.getText().trim().isEmpty()如果字段不应该仅包含空格。
.getText().isEmpty()
.getText().trim().isEmpty()
您可能还考虑编写单个DocumentListener实现,而不是为每个字段创建一个新的匿名类。
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。
change
这会将侦听器与字段分开,但这在当时只是一个上下文问题。
我个人将拥有一个“注册”和“注销”过程,该过程将使您可以根据需要添加或删除字段