在 vaadin table 中创建文本字段并在单击按钮时在容器中获取它们的值

Creating textfields inside a vaadin table and get their value in a container on button click

我是 vaadin 的新手。我想创建一个 table,它有 4 列和 N 行,并且 table 单元格包含文本字段,在 table 之外会有两个按钮,点击第一个按钮时行将添加到 table,单击第二个按钮时,所有文本字段中的值都应添加到某个容器中。 我自己尝试使用 Table.addGeneratedColumn("columnName", new ColumnGenerator() {}); 并在其中制作了一个 TextField,但它没有出现在 table 中。另外,我也不知道如何为每个 table 行分配唯一 ID。 我已经有了使用 BeanItemContainer 将数据填充到 vaadin table 的想法,但我不知道如何创建一个 table,它具有空的 TextFields 并单击按钮我用用户输入的值加载容器在田野里。 提前致谢。

在朋友的帮助和一些搜索下,我按以下方式完成了:-

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

您可以使用 GridaddComponentColumn:

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