我是vaadin的新手。我想创建一个具有4列和n行的表,并且表单元格包含文本字段,表面将有两个按钮,单击1st按钮的按钮,将添加更多行,然后单击单击。在第二个按钮中,应将所有文本场中的值添加到某个容器中。我自己使用Table.addGeneratedColumn("columnName", new ColumnGenerator() {});
尝试了一下,并在其中制作了一个文本字段,但它没有显示在表格中。另外,我也不知道如何为每个表行分配唯一的ID。我已经想到使用BeanTemcontainer将数据填充到Vaadin表中,但是我不知道如何创建一个具有空文本字段的表,并且在按钮上单击我加载容器中,用户已在字段中输入的值。预先感谢。
您可以使用Grid
和addComponentColumn
:
Grid<YouBeanType> grid = new Grid<>();
grid.setSizeFull();
grid.setItems(youBeanCollection); // list of you beans
grid.addColumn(YouBeanType::getContractGUID).setCaption("GUID"); // getter for GUID or something else in you bean
grid.addColumn(YouBeanType::getContractState).setCaption("State"); // state
grid.addComponentColumn((YouBeanType source) -> {
return new Label("controls here"); // you can return component here
}).setCaption("Controls column");
grid.addColumn((YouBeanType source) -> {
if (source.getIsNotContract() != null) {
return source.getIsNotContract().getContractNumber();
} else {
return "";
}
}).setCaption("Contract Number");
grid.sort("signingDate", SortDirection.DESCENDING);
在朋友的帮助下,一些搜索我以下方式进行了操作: -
public class MyTableClass extends VerticalLayout implements View, ValueChangeListener, ClickListener{
private Table myTable = new Table();
private Button btnAddRow = null;
private Button btnSave = null;
private int rowIdsCount = 0;
private TextField txtf1 = new TextField();
private TextField txtf2 = new TextField();
private TextField txtf3 = new TextField();
private TextField txtf4 = new TextField();
private Table createTable()
{
myTable.addContainerProperty("TextField1", TextField.class, null);
myTable.addContainerProperty("TextField2", TextField.class, null);
myTable.addContainerProperty("TextField3", TextField.class, null);
myTable.addContainerProperty("TextField4", TextField.class, null);
MyTableClass obj = new MyTableClass();
myTable.addItem(new Object[] { obj.txtf1, obj.txtf2, obj.txtf3, obj.txtf4 },
++rowIdsCount);
return myTable;
}
private Table addRow() {
MyTableClass obj = new MyTableClass();
myTable.addItem(new Object[]{obj.txtf1,obj.txtf2,obj.txtf3,obj.txtf4}, ++rowIdsCount);
return myTable;
}
public void buttonClick(ClickEvent event) {
if (btnAddRow.equals(event.getButton())) {
this.addRow();
}
else if(btnSave.equals(event.getButton())){
for (int i = 1; i <= this.rowIdsCount; i++) {
String txtf1Val = myTable.getItem(i).getItemProperty("TextField1").getValue().toString().trim();
String txtf2Val = myTable.getItem(i).getItemProperty("TextField2").getValue().toString().trim();
String txtf3Val = myTable.getItem(i).getItemProperty("TextField3").getValue().toString().trim();
String txtf4Val = myTable.getItem(i).getItemProperty("TextField4").getValue().toString().trim();
}
}
}