Codenameone 使用选择器后禁用AutoCompleteTextField

Codenameone 使用选择器后禁用AutoCompleteTextField,codenameone,Codenameone,我的应用程序有一个小GUI问题:在我几周前创建的一个表单中,有三个AutoCompleteTextfield。如果第一个文件中没有文本,则其他文件将被禁用 它工作起来很有魅力,但也有三个字符串选择器,用于选择用户、类型。。。当第一个ACTF已经填充,因此另外两个ACTF被启用时,如果我从任何选择器中拾取一个字符串,那么两个ACTF将被禁用!我真的不知道他们为什么会残疾,所以如果有人有什么想法,我将不胜感激:) 以下是第一个ACTF的覆盖代码: final DefaultListModel<

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

它工作起来很有魅力,但也有三个字符串选择器,用于选择用户、类型。。。当第一个ACTF已经填充,因此另外两个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;
        }

    };
final DefaultListModel optport=new DefaultListModel();
actfPart=新的自动完成文本字段(optPart){
@凌驾
受保护的布尔过滤器(字符串文本){
如果(text.length()==0){
optPart.removeAll();
actfContact.setEnabled(false);
setHint(language.get(“ui.mobile.newtask.hint.contact.nopartner”);
actfProj.setEnabled(假);
setHint(language.get(“ui.mobile.newtask.hint.project.nopartner”);
返回true;
}
字符串[]l=searchPartner(文本);
如果(l==null | | l.length==0){
actfContact.setEnabled(false);
setHint(language.get(“ui.mobile.newtask.hint.contact.nopartner”);
actfProj.setEnabled(假);
setHint(language.get(“ui.mobile.newtask.hint.project.nopartner”);
返回false;
}
actfContact.setEnabled(真);
setHint(language.get(“ui.mobile.newtask.hint.contact”);
actfProj.setEnabled(真);
setHint(language.get(“ui.mobile.newtask.hint.project”);
optPart.removeAll();
for(字符串s:l){
optPart.addItem(s);
}
返回true;
}
私有字符串[]searchPartner(字符串文本)
{
Partner[]parts=RESTeCust1.searchSomePartners(0,30,text);
String[]strs=新字符串[parts.length];
int i=0;
用于(合作伙伴部分:部分){
strs[i]=part.getLabel()+“REF:”+part.getReference();
i++;
}
返回STR;
}
};

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

派生另一个
AutoCompleteTextField
实例之一,并覆盖
setEnabled(boolean)
在覆盖的方法中放置一个断点并再现问题。您将看到一个callstack,它确切地指示谁调用了
setEnabled(false)
以及为什么…

谢谢,我会尝试找到问题,当选择器关闭时,它会导致整个表单的重新绘制,并且ACTF正在使用一个字符串进行搜索,该字符串是一些结果字符串的串联,所以搜索失败了,所以其他人被禁用了。。。