在 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();
}
}
}
您可以使用 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);
我是 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();
}
}
}
您可以使用 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);