将jButton保持为灰色,直到jTextFields!= null

时间:2014-08-19 15:59:57

标签: java swing documentlistener

我有4个jTextFields,一旦按下提交按钮,我就将输入保存到文件中。我希望能够保持提交按钮被禁用,直到每个字段至少不为空。我在哪里可以放这样的东西

    if(jTextField1 == null || jTextField2 == null || jTextField3 == null || jTextField4 == null){
        jButton2.setEnabled(false);
    }

以便程序启用/禁用按钮。就像一旦最后一个字段中有一个字符,我希望它被启用?

5 个答案:

答案 0 :(得分:3)

您需要添加侦听器以检测用户何时输入文本。为了让它注册任何更改(而不仅仅是在用户点击Enter时),您应该将DocumentListener附加到每个JTextField的基础文档。

然后,让每个听众调用一个函数来进行检查并相应地更新JButton的{​​{1}}状态。

Related

答案 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)

  1. 初始化组件时禁用按钮

例如:

 public Home() {
   
 initComponents();
 button.setEnabled(false);
}

2)通过在最后一个jTextField中调用事件“ KeyReleased”来启用它。

例如:

private void jTextFieldKeyReleased(java.awt.event.KeyEvent evt) {
button.setEnabled(true);
}

如果这样做,则当任何字符输入最后一个文本字段时,该按钮将自动启用。

谢谢:)