嗨我非常需要一些帮助我已经搜索过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);
}
}
});
答案 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;允许您根据需要添加或删除字段的过程