I’m creating a two column ListGrid. My desired effect is:
Here is what I’m experiencing:
Here is the test code:
To run the test:
- First column: auto-fitted to the width of the data. I am doing this by using field1.setAutoFitWidth(true)
- Second column: take up the remaining space of the ListGrid. I am doing this by using field2.setWidth("*")
Here is what I’m experiencing:
- If the ListGrid is drawn after the data in the ListGrid is set I get the desired effect.
- If the data in the ListGrid is set after the ListGrid is populated then the second column does not extend to full length of the ListGrid.
Here is the test code:
Code:
public class ListGridRemainingWidthTest extends VStack {
private static final String FIELD1 = "One";
private static final String FIELD2 = "Two";
private static final HashMap<String, String> data = new HashMap<String, String>() {
private static final long serialVersionUID = 1L;
{
put("cowfish",
"Authoritatively extend cross-platform \"outside the box\" thinking");
put("danker", "Continually impact installed base niche markets");
put("postretirement",
"Phosfluorescently synergize user-centric supply chains");
put("lockkeepers",
"Holisticly strategize 24/7 collaboration and idea-sharing");
put("liquids", "Quickly mesh process-centric intellectual capital");
put("volvoxes",
"Phosfluorescently leverage existing client-focused quality vectors");
put("nitride", "Conveniently innovate bricks-and-clicks schemas");
put("operator", "Credibly disintermediate efficient markets");
put("compliance", "Phosfluorescently network flexible meta-services");
put("replevin", "Enthusiastically reconceptualize cross-unit fungibility");
}
};
public ListGridRemainingWidthTest() {
setMembersMargin(10);
addMember(new TestListGrid(true));
final TestListGrid bottomListGrid = new TestListGrid(false);
addMember(getButton(bottomListGrid));
addMember(bottomListGrid);
}
private Button getButton(final TestListGrid bottomListGrid) {
Button button = new Button("Populate Bottom ListGrid");
button.setAutoFit(true);
button.setLayoutAlign(Alignment.CENTER);
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
bottomListGrid.populate();
}
});
return button;
}
private static class TestListGrid extends ListGrid {
public TestListGrid(boolean populate) {
setWidth(1000);
setHeight(250);
ListGridField field1 = new ListGridField(FIELD1);
field1.setAutoFitWidth(true);
ListGridField field2 = new ListGridField(FIELD2);
field2.setWidth("*");
setFields(field1, field2);
if (populate) {
populate();
}
}
public void populate() {
ArrayList<ListGridRecord> records = new ArrayList<ListGridRecord>();
for (Entry<String, String> entry : data.entrySet()) {
ListGridRecord record = new ListGridRecord();
record.setAttribute(FIELD1, entry.getKey());
record.setAttribute(FIELD2, entry.getValue());
records.add(record);
}
setData(records.toArray(new ListGridRecord[0]));
}
}
}
- new ListGridRemainingWidthTest().draw()
- The first ListGrid is populated with data and the second field is extended to the full length of the ListGrid.
- Click the button
- The second ListGrid becomes populated with data be the second field is not extended to the full length of the ListGrid.
Comment