0

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

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);
                    }
              }
        });
4

3 回答 3

1

你试过这样吗?

    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);
        }
    });
于 2013-04-21T12:31:23.840 回答
1

在两个地方使用来调节按钮的enabled属性:SavesetEnabled()

  • 在您的执行shouldYieldFocus()InputVerifier附加到每个相关组件。这里引用了教程和一些示例。

  • 在组件的普通侦听器中。

于 2013-04-21T13:16:25.300 回答
0

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

public boolean validate(...){
   //some stuff
   if(validated){
     return true;
   }else{
     return false;
   }
}

那么你可以像使用它一样使用它。

button.setEnabled(validate(...));
于 2013-04-21T12:19:39.987 回答