在Container Codename One中搜索过滤器

时间:2018-04-02 15:32:33

标签: java codenameone

我试图在我的Container中实现一个包含一组按钮的搜索过滤器。

这是我的代码:

$("input[type=file]").each(function() {
    if($(this).val() === "") {
        formData.delete($(this).attr("name"));
    }
});

此代码基本上是从数据库查询数据,然后将其结果设置为按钮,然后添加到Container。我的问题是如何为我的Container实现搜索过滤器?我看过public void listMenu() { Dialog loading = new InfiniteProgress().showInifiniteBlocking(); loading.show(); final Form listMenu = new Form("List Menu"); listMenu.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); Container list = new Container(); list.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); list.removeAll(); Button back = new Button("Back to Main Menu"); ParseQuery<ParseObject> query = ParseQuery.getQuery("mylist"); query.whereExists("Title"); List<ParseObject> results = null; try { Button btn = null; results = query.find(); if(!results.isEmpty()) { int index = 0; int size = results.size(); for(;index < size;++index) { list.add(btn = new Button(results.get(index).getString("Title"))); addListener(btn); } } } catch (com.parse4cn1.ParseException e) { Dialog.show("Err", "Server is not responding.", "OK", null); } listMenu.add(list); listMenu.add(back); listMenu.show(); loading.dispose(); back.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { new StateMachine("/theme"); } }); } 但不确定FilterProxyListModel<T>是否与ListModel<T>兼容。我很高兴在我的代码中看到搜索过滤器实现的示例。

1 个答案:

答案 0 :(得分:2)

FilterProxyListModel适用于我们不再推荐的List。有一个搜索容器here的完整示例。它使用MultiButton,但使用Button也可以正常工作:

hi.getToolbar().addSearchCommand(e -> {
    String text = (String)e.getSource();
    if(text == null || text.length() == 0) {
        // clear search
        for(Component cmp : hi.getContentPane()) {
            cmp.setHidden(false);
            cmp.setVisible(true);
        }
        hi.getContentPane().animateLayout(150);
    } else {
        text = text.toLowerCase();
        for(Component cmp : hi.getContentPane()) {
            Button mb = (Button)cmp;
            String line1 = mb.getText();
            boolean show = line1 != null && line1.toLowerCase().indexOf(text) > -1;
            mb.setHidden(!show);
            mb.setVisible(show);
        }
        hi.getContentPane().animateLayout(150);
    }
}, 4);