Java 仅当验证为True时启用Jbutton

Java 仅当验证为True时启用Jbutton,java,swing,validation,jbutton,Java,Swing,Validation,Jbutton,验证swing应用程序的输入字段(如文本字段、组合框等)并让用户仅在一切正常时按下保存按钮的最佳方法是什么。假设搜索功能也在同一界面中。所以搜索记录也会填充输入字段。但在这种情况下,“保存”按钮应保持禁用状态 initComponents(); btnSave.setEnabled(false); txt1.getDocument().addDocumentListener(new DocumentListener() { @Over

验证swing应用程序的输入字段(如文本字段、组合框等)并让用户仅在一切正常时按下保存按钮的最佳方法是什么。假设搜索功能也在同一界面中。所以搜索记录也会填充输入字段。但在这种情况下,“保存”按钮应保持禁用状态

initComponents();
        btnSave.setEnabled(false);

        txt1.getDocument().addDocumentListener(new DocumentListener() {
              @Override
              public void changedUpdate(DocumentEvent e) {

              }

              @Override
              public void removeUpdate(DocumentEvent e) {
                    validate(txt1.getText(),e);
              }

              @Override
              public void insertUpdate(DocumentEvent e) {
                    validate(txt1.getText(),e);
              }

              public void validate(String enteredText,DocumentEvent e) {
                    String currText = "";
                    try {
                          Document doc = (Document) e.getDocument();
                          currText = doc.getText(0, doc.getLength());
                    } catch (BadLocationException e1) {
                    }

                    if(enteredText.equals(currText)){
                      //if validated successfully
                           btnSave.setEnabled(false);
                    }else{
                    btnSave.setEnabled(true);
                    }
              }
        });

创建一个方法来检查是否所有输入都已完成或/和所有验证都已通过,并最终返回一个布尔值。

public boolean validate(...){
   //some stuff
   if(validated){
     return true;
   }else{
     return false;
   }
}
然后你可以像这样使用它。

button.setEnabled(validate(...));
你试过这样吗

    final JTextField textField = new JTextField();
    final JButton submitBtn = new JButton();
    submitBtn.setEnabled(true);

    textField.getDocument().addDocumentListener(new DocumentListener() {
        public void changedUpdate(DocumentEvent e) {
            validate(e);
        }
        public void removeUpdate(DocumentEvent e) {
            validate(e);
        }
        public void insertUpdate(DocumentEvent e) {
            validate(e);
        }

        public void validate(String enteredText) {
            String currText = "";
            try {
                Document doc = (Document)e.getDocument();
                currText = doc.getText(0, doc.getLength());
            } catch (BadLocationException e1) {
                e1.printStackTrace();
            }
            //validation of currText here

            //if validated successfully
            submitBtn.setEnabled(true);
            //else
            submitBtn.setEnabled(false);
        }
    });

在两个位置使用
setEnabled()
调节保存按钮的
enabled
属性:

  • 在您的
    实现中,应在附加到每个相关组件的
    InputVerifier
    中执行
    shouldYieldFocus()
    。本教程和一些例子被引用

  • 在组件的普通侦听器中


@vishal\u aim我在表单加载时设置了enable false。然后在验证方法结束时,为保存按钮设置enable true。然后我在最后一个文本字段的按下事件中调用了Validate方法。如果用户填充了最后一个文本字段并清除了前面的一个文本字段呢??然后您需要将该操作添加到所有输入元素。@GnomezGrave。这就是我在这里遇到的问题。我会试试你的建议。谢谢你的回答。我已经试过了。但是我没有这样做。按钮。设置已启用(验证(…);请尽快告知您的答复。没有,我没有试过这样的东西。好主意,但是,我不喜欢那样,@vishal\u aim,我试着使用你给我的代码。但这对我不起作用。对不起,我还是java初学者。你能看看我的密码吗。我更新了原来的帖子谢谢,更新了代码@用户2033382,您可以像现在这样尝试,纯文本组件不会触发changedUpdate事件。@vishal_aim Thnx用于更新。我知道我必须绕过documentlistner才能得到预期的结果。我第一次尝试这个。我根据您更新的代码编辑了以前的代码。但还是没有运气(我更新了原来的帖子。你能看看我把事情搞砸了吗。