【问题标题】:Codename one - autocompletetextfield getitem selected代号一 - autocompletetextfield getitem selected
【发布时间】:2017-04-28 16:09:56
【问题描述】:

我有两个问题:

1) 首先,我想在AutoCompleteTextField 中添加一个地图,正好在DefaultListModel 中,然后我想在我的autocompletetextField 中添加列表模型

2) 当我在AutoCompleteTextField 中选择一个元素时,如何获取文本?

    Form hi = new Form("Auto Complete", new BoxLayout(BoxLayout.Y_AXIS));
        AutoCompleteTextField ac = new AutoCompleteTextField("Short", "Shock", "Sholder", "Shrek0", "3asna", "niazra");
    ac.setMinimumElementsShownInPopup(5);
    //final DefaultListModel<Map<String,Object>> options = new DefaultListModel<>();
    final DefaultListModel<String> options = new DefaultListModel<>();

    AutoCompleteTextField an = new AutoCompleteTextField(options);
    hi.add(an);
    ac.addListListener(a -> {
        List<Object> ls = new List<>();
        System.out.println("i want to display the text selected");

    });
    hi.add(ac);
    hi.show();

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    当您在 AutoCompleteTextField 的建议框中选择一个项目时,该项目的文本将复制到 AutoCompleteTextfield 的 TextField 部分,但这仅发生在 ListEvent 之后。

    为了获得这种行为,最好在 DefaultListModel 上使用选择侦听器:

        Form hi = new Form("ACTF", new BoxLayout(BoxLayout.Y_AXIS));
    
        DefaultListModel<String> defList = new DefaultListModel<>("Red", "Green", "Blue", "Orange");
        AutoCompleteTextField tf1 = new AutoCompleteTextField(defList);
    
        defList.addSelectionListener((oldid, newid)-> Log.p(defList.getItemAt(newid)));
    
        hi.add(tf1);
        hi.show();
    

    我不知道为什么,显示表单后出现两次,但之后完全正常。

    编辑:如果你想在屏幕上显示文本,你必须使用这样的东西:

        Form hi = new Form("ACTF", new BoxLayout(BoxLayout.Y_AXIS));
    
        Label text = new Label("Selected text");
    
        DefaultListModel<String> defList = new DefaultListModel<>("Red", "Green", "Blue", "Orange");
        AutoCompleteTextField tf1 = new AutoCompleteTextField(defList);
    
        defList.addSelectionListener((oldid, newid)-> {
            text.setText(defList.getItemAt(newid));
            hi.revalidate();
        });
        hi.add(text);
        hi.add(tf1);
        hi.show();
    

    编辑 2: 链接地图示例:

        Form hi = new Form("ACTF", new BoxLayout(BoxLayout.Y_AXIS));
    
        Map testMap = new HashMap<String, String>();
        testMap.put("Red", "Roses are red");
        testMap.put("Green", "Grass is green");
        testMap.put("Blue", "Sky is blue");
        testMap.put("Orange", "Apricots are orange");
    
        Label text = new Label("Selected text");
    
    
    
        DefaultListModel<String> defList = new DefaultListModel<>(testMap.keySet());
        AutoCompleteTextField tf1 = new AutoCompleteTextField(defList);
    
        defList.addSelectionListener((oldid, newid)-> {
            text.setText((String) testMap.get(defList.getItemAt(newid)));
            hi.revalidate();
        });
        hi.add(text);
        hi.add(tf1);
        hi.show();
    

    【讨论】:

    • 你想在哪里显示选定的文本?在设备的屏幕上?在这里,我的代码将文本发送到调试控制台,就像 System.out.println 一样。检查示例的编辑版本。
    • 谢谢它的工作,但我现在想在 AutoComAutoCompleteTextField 中添加一个地图,因为当我选择项目时我想获取 id 我不知道你是否理解我这里是一个示例 final DefaultListModel> options = new DefaultListModel(); AutoCompleteTextField an = new AutoCompleteTextField(options);
    • 您无法将地图添加到默认列表模型。列表模型使用一个数组,它将一个从零开始的索引映射到一个值。如果您想跟踪对象的字符串 ID,您将需要使用与列表模型相同的索引保留相应的键列表 - 或者将条目值放入也存储您感兴趣的键的对象中。
    • 请给我一个例子,因为 AutoCompleteTextField 不支持地图
    • 保留一个映射变量,然后在动作监听器中执行map.get(autoComplete.getText())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多