多个Jtextfield在Jbutton启用前填充 [英] Multiple Jtextfields to be filled before Jbutton enable
问题描述
您好我非常需要一些帮助我已经搜索关于Jtextfield在jbutton启用之前填充,DocumentListener大多数人使用确定如果Jtextfield是填充。我试过DocumentListener和它的工作,但所有我想要的是所有的Jtextfield必须不是空之前的Jbutton启用这里是我的代码。
Hi I badly need some help I already search about Jtextfield to be filled before jbutton enables, DocumentListener most people use to determined if Jtextfield is being populated. I tried DocumentListener and it works but all I want is all Jtextfield must be not empty before the Jbutton enables here is my code.
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()&& ))
表示所有字段必须为空。有些时候你需要大声读出这个逻辑...
Means that all the fields must be empty. Some times you need to read this logic aloud...
如果字段为空AND字段为空AND字段为空...
"if field is empty AND field is empty AND field is empty..."
如果你使用 ||
(或),这意味着如果任何一个字段为空,语句将是 true
例如...
If you used ||
(or) instead, it would mean that if any one of the fields was empty the statement would be true
for example...
if (Ftext.getText().equals("") ||
Mtext.getText().equals("") ||
Ltext.getText().equals("") ||
Addtext.getText().equals("")) {...
$ b < .getText()。isEmpty()或 .getText()。trim()。isEmpty()
。
您还可以考虑编写一个 DocumentListener
实现,而不是为每个字段创建一个新的匿名类
You might also consider writing a single DocumentListener
implementation instead of creating a new anonymous class for each field
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);
}
}
然后,您只需创建一个实例。 。
Then you'd just create a single instance...
FieldValidationHandler handler = new FieldValidationHandler(Ftext, Mtext, Ltext, Addtext);
现在,这种方法有点鬼祟,因为它添加了 DocumentListener
Now, this approach is a little sneaky, in that it adds the DocumentListener
to the fields you specify via the constructor automatically.
另一种方法可能是有一些类型的验证控制器,你将传递到这个处理程序,当调用 change
时,它会调用某种validate方法。
Another approach might be to have some kind "Validation" controller, that you would pass to this handler and it would call some kind of "validate" method when change
was called.
我个人有一个注册和注销过程,这将允许你根据需要添加或删除字段
I would personally have a "register" and "unregister" process which would allow you to add or remove fields as you need to
这篇关于多个Jtextfield在Jbutton启用前填充的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!