我有4个jTextFields,一旦按下提交按钮,我就将输入保存到文件中。我希望能够保持提交按钮被禁用,直到每个字段至少不为空。我在哪里可以放这样的东西
if(jTextField1 == null || jTextField2 == null || jTextField3 == null || jTextField4 == null){
jButton2.setEnabled(false);
}
以便程序启用/禁用按钮。就像一旦最后一个字段中有一个字符,我希望它被启用?
答案 0 :(得分:3)
您需要添加侦听器以检测用户何时输入文本。为了让它注册任何更改(而不仅仅是在用户点击Enter
时),您应该将DocumentListener
附加到每个JTextField
的基础文档。
然后,让每个听众调用一个函数来进行检查并相应地更新JButton
的{{1}}状态。
答案 1 :(得分:1)
一个简单的可运行演示:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.util.List;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class ButtonDemo extends JFrame implements DocumentListener {
/**
*
*/
private static final long serialVersionUID = -68704905659973315L;
private JPanel panel = null;
private JTextField field1 = null;
private JTextField field2 = null;
private JButton btn = null;
private List<JTextField> textFields = null;
public static void main(String[] args) {
new ButtonDemo();
}
private ButtonDemo() {
this.panel = new JPanel();
this.field1 = new JTextField("JTextField_1");
this.field2 = new JTextField("JTextField_2");
this.field1.getDocument().addDocumentListener(this);
this.field2.getDocument().addDocumentListener(this);
this.textFields = new Vector<>();
this.textFields.add(field1);
this.textFields.add(field2);
this.btn = new JButton("Tests-Button");
this.panel.setLayout(new FlowLayout());
this.panel.add(field1);
this.panel.add(field2);
this.panel.add(btn);
this.add(panel);
this.setPreferredSize(new Dimension(200, 200));
this.pack();
this.setVisible(true);
}
@Override
public void insertUpdate(DocumentEvent e) {
updateButtonEnabledStatus(btn, textFields);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateButtonEnabledStatus(btn, textFields);
}
@Override
public void changedUpdate(DocumentEvent e) {
updateButtonEnabledStatus(btn, textFields);
}
private void updateButtonEnabledStatus(JButton btn, List<JTextField> fields) {
boolean enabled = true;
for (JTextField field : fields) {
if (field.getText().length() == 0) {
enabled = false;
break;
}
}
btn.setEnabled(enabled);
}
}
答案 2 :(得分:0)
jTextField可能为空,但不一定是null。你想测试它的内容。
if(jTextField1.getText() == null || jTextField2.getText() == null || jTextField3.getText() == null || jTextField4.getText() == null){
jButton2.setEnabled(false);
}
如果要更新按钮,则需要在编辑时检查内容。您可以通过实现动作侦听器来观察文本字段的内容来实现。您可以使用DocumentListener(http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html)执行此操作。
答案 3 :(得分:0)
为每个文本字段使用keyPressed侦听器,以便在文本字段的文本发生更改时运行检查。
禁用按钮的方法是setEnabled(false);
请注意,如果当时文本内容为空(侦听器无法运行),则必须在程序启动时使按钮无效
答案 4 :(得分:-1)
例如:
public Home() {
initComponents();
button.setEnabled(false);
}
2)通过在最后一个jTextField中调用事件“ KeyReleased”来启用它。
例如:
private void jTextFieldKeyReleased(java.awt.event.KeyEvent evt) {
button.setEnabled(true);
}
如果这样做,则当任何字符输入最后一个文本字段时,该按钮将自动启用。
谢谢:)