【问题标题】:Multiple Jtextfields to be filled before Jbutton enable在启用 Jbutton 之前要填充多个 Jtextfields
【发布时间】:2014-05-19 02:17:48
【问题描述】:

您好,我非常需要一些帮助,我已经在 jbutton 启用之前搜索了要填充的 Jtextfield,大多数人使用 DocumentListener 来确定是否填充了 Jtextfield。我尝试了 DocumentListener 并且它可以工作,但我想要的只是在启用 Jbutton 之前所有 Jtextfield 都不能为空,这是我的代码。

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

【问题讨论】:

    标签: java swing comparison jbutton documentlistener


    【解决方案1】:

    if (Ftext.getText().equals("") && Mtext.getText().equals("") && Ltext.getText().equals("") && Addtext.getText().equals(""))

    表示所有字段必须为空。有时你需要大声朗读这个逻辑......

    "如果字段为空且字段为空且字段为空..."

    如果您改用||(或),则意味着如果任何一个字段为空,则语句将为true,例如...

    if (Ftext.getText().equals("") || 
        Mtext.getText().equals("") ||
        Ltext.getText().equals("") ||
        Addtext.getText().equals("")) {...
    

    如果字段不应仅包含空格,您还应考虑使用 .getText().isEmpty().getText().trim().isEmpty()

    您也可以考虑编写单个 DocumentListener 实现,而不是为每个字段创建一个新的匿名类

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

    然后你只需创建一个实例...

    FieldValidationHandler handler = new FieldValidationHandler(Ftext, Mtext, Ltext, Addtext);
    

    现在,这种方法有点偷偷摸摸,因为它会自动将DocumentListener 添加到您通过构造函数指定的字段中。

    另一种方法可能是使用某种“验证”控制器,您可以将其传递给此处理程序,并在调用 change 时调用某种“验证”方法。

    这会将侦听器与字段分开,但这只是当时的上下文问题。

    我个人会有一个“注册”和“取消注册”流程,允许您根据需要添加或删除字段

    【讨论】:

    • 感谢您的快速响应先生,我还是一个java新手,会尝试这个。
    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 2015-10-08
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多