2016-06-30 31 views
2

Ich hatte GridLayout mit 2 Spalten verwendet. Wenn ich suche (Code ist unten), bleibt die TextArea Komponente in ihrer eigenen Position. Die Verborgenen nehmen auch ihre Plätze ein. Wenn ich BoxLayout anstelle von GridLayout verwende, funktioniert es gut, aber es gibt nur eine Spalte.Gridlayout Textfeldsuche Codenameone

Problem nach der Suche

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

Antwort

1

Die setHidden die Komponente hält eine (0,0) bevorzugte Größe des das Bauteil versteckt, ignoriert Gridlayout der Komponenten Größe bevorzugt, weil es die Container zu aufspaltet gleich große Zellen. Was Sie tun müssen, ist das Entfernen und Hinzufügen der Komponenten anstelle der Verwendung der setHidden

+1

Oder verwenden Sie 'myGridLayout.setHideZeroSized (true)', die wir hinzugefügt, um genau das gleiche Problem in der Benutzeroberfläche der Einstellungen zu unterstützen. Sollte einen Blog-Post darüber geschrieben haben, aber es wurde unter den Aufgaben begraben ... –

+0

Vielen Dank, SetHideZeroSized funktioniert perfekt. Wenn ich die Komponente wie in der Antwort entferne, liegt ein Problem vor. Wenn der gesuchte Text im Textfeld gelöscht oder bearbeitet wird, muss ich die Komponenten neu hinzufügen, aber die Komponenten sind bereits entfernt. –