Gridlayout文本域搜索问题codenameone

时间:2016-06-30 11:31:13

标签: codenameone

我曾经使用过2列的gridLayout。当我搜索(代码在下面)时,textArea组件保持自己的位置。那些隐藏的也取代了他们的位置。如果我使用boxLayout而不是gridLayout,它工作正常,但只有一列。

搜索后的

问题

enter image description here

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);
}
});

1 个答案:

答案 0 :(得分:1)

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