Codenameone Gridlayout文本字段搜索问题代码NameOne

Codenameone Gridlayout文本字段搜索问题代码NameOne,codenameone,Codenameone,我使用了两列gridLayout。当我搜索时(代码在下面),textArea组件保持其自身的位置。那些被隐藏的也占据了他们的位置。如果我使用boxLayout而不是gridLayout,它可以正常工作,但只有一列 搜索后的问题 Container wrapContainerMinute=新容器(新网格布局(connection.responseMenu.size()/2+1,2)); f、 添加(wrapContainerMinute); for(映射入口集:connection.respon

我使用了两列gridLayout。当我搜索时(代码在下面),textArea组件保持其自身的位置。那些被隐藏的也占据了他们的位置。如果我使用boxLayout而不是gridLayout,它可以正常工作,但只有一列

搜索后的问题

Container wrapContainerMinute=新容器(新网格布局(connection.responseMenu.size()/2+1,2));
f、 添加(wrapContainerMinute);
for(映射入口集:connection.responseMenu){
String tableName=(String)entrySet.get(“name”);
Container singleMinuteMenuContainer=新容器(新的BoxLayout(BoxLayout.Y_轴));
TextArea minuteTextArea=新的TextArea(表名);
minuteTextArea.setEditable(false);
minuteTextArea.getAllStyles().setAlignment(Label.CENTER);
minuteTextArea.setScrollVisible(假);
minuteTextArea.setRows(20);
minuteTextArea.setGrowByContent(true);
minuteTextArea.SetGrowthLimit(2);
singleMinuteMenuContainer.add(minuteTextArea);
}
minuteSearchTextField.addDataChangeListener(新DataChangedListener(){
@凌驾
公共无效数据已更改(整型,整型索引){
String searchTableName=minuteSearchTextField.getText().toLowerCase();
布尔显示=假;
用于(组件c:wrapContainerMinute){
Container searchedContainer=(Container)c;
TextArea searchedTextArea=(TextArea)searchedContainer.getComponentAt(0);
c、 setVisible(真);
如果(searchedTextArea.getText().toLowerCase().indexOf(searchTableName)>-1){
show=searchedTextArea.getText().toLowerCase().indexOf(searchTableName)>-1;
c、 setHidden(!show);
c、 设置可见(显示);
}否则{
show=searchedTextArea.getText().toLowerCase().indexOf(searchTableName)>-1;
c、 setHidden(!show);
c、 设置可见(显示);
}
}
wrapContainerMinute.animateLayout(1500);
}
});

setHidden为组件提供了一个(0,0)首选大小,该大小隐藏了组件,GridLayout忽略了组件首选大小,因为它将容器拆分为大小相等的单元。
您需要做的是删除和添加组件,而不是使用setHidden

或使用我们添加的
myGridLayout.sethidezeized(true)
,以支持设置UI中完全相同的问题。应该写一篇关于它的博文,但是它被任务掩埋了…谢谢你,Sethidezezed工作得非常完美。如果我删除了答案中的组件,则存在问题。当文本字段中的搜索文本被删除或编辑时,我必须重新添加组件,但组件已被删除。
Container wrapContainerMinute = new Container(new GridLayout(connection.responseMenu.size() / 2+1, 2));
f.add(wrapContainerMinute);
for (Map<String, Object> entrySet : connection.responseMenu) {
    String tableName = (String) entrySet.get("name");

    Container singleMinuteMenuContainer = new Container(new BoxLayout(BoxLayout.Y_AXIS));
    TextArea minuteTextArea = new TextArea(tableName);
    minuteTextArea.setEditable(false);
    minuteTextArea.getAllStyles().setAlignment(Label.CENTER);
    minuteTextArea.setScrollVisible(false);
    minuteTextArea.setRows(20);
    minuteTextArea.setGrowByContent(true);
    minuteTextArea.setGrowLimit(2);
    singleMinuteMenuContainer.add(minuteTextArea);
}

minuteSearchTextField.addDataChangeListener(new DataChangedListener() {

@Override
public void dataChanged(int type, int index) {
    String searchTableName = minuteSearchTextField.getText().toLowerCase();
    boolean show = false;
    for (Component c : wrapContainerMinute) {
        Container searchedContainer = (Container)c;
        TextArea searchedTextArea = (TextArea) searchedContainer.getComponentAt(0);
        c.setVisible(true);
        if (searchedTextArea.getText().toLowerCase().indexOf(searchTableName)>-1) {
            show = searchedTextArea.getText().toLowerCase().indexOf(searchTableName)>-1;
            c.setHidden(!show);
            c.setVisible(show);
        }else{
            show = searchedTextArea.getText().toLowerCase().indexOf(searchTableName) > -1;
            c.setHidden(!show);
            c.setVisible(show);
        }
    }
    wrapContainerMinute.animateLayout(1500);
}
});