【问题标题】:AutoCompleteTextField disabled after using a Picker使用 Picker 后禁用 AutoCompleteTextField
【发布时间】:2017-05-19 15:21:29
【问题描述】:

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

它就像一个魅力,但也有三个 StringPickers,用于选择诸如用户,类型之类的东西......当第一个 ACTF 已经填充,因此另外两个启用时,如果我选择一个字符串从任何一个 Picker 中,这两个 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和字符串Pickers。

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    派生其他AutoCompleteTextField 实例之一并覆盖setEnabled(boolean) 在被覆盖的方法中放置一个断点并重现问题。您将看到一个调用堆栈,准确指出谁调用了setEnabled(false) 以及为什么...

    【讨论】:

    • 谢谢,我试试
    • Found the problem, when the picker is closed, it cause a repaint of the whole form, and the ACTF was searching with a string which was a concatenation of some results strings, so the search failed and thus其他被禁用的ACTF...
    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 2012-01-11
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多