使用Picker后,AutoCompleteTextField被禁用

时间:2017-05-18 08:24:25

标签: codenameone

我的应用程序有一点GUI问题:在几周前我创建的一种表单中,有三个AutoCompleteTextfield。如果第一个内部没有文本,则其他文本被禁用。

它就像一个魅力,但也有三个StringPickers,用于选择像用户,类型......当第一个ACTF已经填充,因此另外两个被启用,如果我选择一个字符串从任何一个采摘者,两个ACTF成为残疾人!我真的不知道他们为什么残疾,所以如果有人有想法,我将不胜感激:)

以下是第一个ACTF的覆盖代码:

final DefaultListModel<String> optPart = new DefaultListModel<>();
    actfPart = new AutoCompleteTextField(optPart){

        @Override
        protected boolean filter(String text) {

            if(text.length() == 0) {
                optPart.removeAll();
                actfContact.setEnabled(false);
                actfContact.setHint(language.get("ui.mobile.newtask.hint.contact.nopartner"));
                actfProj.setEnabled(false);
                actfProj.setHint(language.get("ui.mobile.newtask.hint.project.nopartner"));
                return true;
            }
            String[] l = searchPartner(text);
            if(l == null || l.length == 0) {
                actfContact.setEnabled(false);
                actfContact.setHint(language.get("ui.mobile.newtask.hint.contact.nopartner"));
                actfProj.setEnabled(false);
                actfProj.setHint(language.get("ui.mobile.newtask.hint.project.nopartner"));
                return false;
            }

            actfContact.setEnabled(true);
            actfContact.setHint(language.get("ui.mobile.newtask.hint.contact"));
            actfProj.setEnabled(true);
            actfProj.setHint(language.get("ui.mobile.newtask.hint.project"));

            optPart.removeAll();
            for(String s : l) {
                optPart.addItem(s);
            }
            return true;
        }

        private String[] searchPartner(String text) 
        {
            Partner[] parts = RESTeCust1.searchSomePartners(0, 30, text);
            String[] strs = new String[parts.length];
            int i = 0;
            for (Partner part : parts) {
                strs[i] = part.getLabel() + " REF: " + part.getReference();
                i++;
            }

            return strs;
        }

    };

在调用此代码之前,其他ACTF和字符串选择器已初始化。

1 个答案:

答案 0 :(得分:2)

导出其他AutoCompleteTextField个实例之一并覆盖setEnabled(boolean)在overriden方法中放置一个断点并重现该问题。您将看到一个callstack,表明究竟是谁调用了setEnabled(false)以及为什么......