我曾经使用过2列的gridLayout。当我搜索(代码在下面)时,textArea组件保持自己的位置。那些隐藏的也取代了他们的位置。如果我使用boxLayout而不是gridLayout,它工作正常,但只有一列。
搜索后的问题
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);
}
});
答案 0 :(得分:1)
setHidden为组件提供了一个隐藏组件的(0,0)首选大小,GridLayout忽略了组件首选大小,因为它将Container拆分为大小相等的单元格。 您需要做的是删除和添加组件,而不是使用setHidden