Vaadin 流程,试图在网格中显示水平布局
Vaadin flow, trying to display Horizontal layout in Grid
我写了下面的代码,我想在 Vaadin Grid 中添加带有 TextBox 和 Button 的 HorizontalLayout。但是当我 运行 代码显示输出为
com.vaadin.flow.component.orderedlayout.HorizontalLayout@145a03ea
com.vaadin.flow.component.orderedlayout.HorizontalLayout@1f7acb46
package com.packagename.myapp;
import java.util.ArrayList;
import java.util.List;
import com.vaadin.flow.component.Text;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
@Route("table")
public class TestTable extends VerticalLayout {
private Grid<TblValue> grid = new Grid<>();
public TestTable() {
init();
}
private void init() {
grid.addColumn(TblValue::getLayout);
grid.setItems(createData());
add(grid);
}
private List<TblValue> createData(){
List<TblValue> data = new ArrayList<>();
data.add(new TblValue());
data.add(new TblValue());
return data;
}
private class TblValue {
HorizontalLayout layout = new HorizontalLayout();
private Text txt = new Text("test string");
private Button btn = new Button("Submit");
public TblValue() {
layout.add(txt, btn);
}
public HorizontalLayout getLayout() {
return layout;
}
public void setLayout(HorizontalLayout layout) {
this.layout = layout;
}
}
}
正如 Tatu Lund 在评论中提到的,您的问题的解决方案是使用 grid.addComponentColumn(...)
而不是 grid.addColumn(...)
。
addColumn(...)
方法将始终显示字符串。如果 valueprovider returns 任何对象,它将显示其字符串值 String.valueOf(object)
。这就是你所看到的。 com.vaadin.flow.component.orderedlayout.HorizontalLayout@145a03ea
是您调用 String.valueOf(myHorizontalLayout)
时得到的结果。
另一方面,addComponentColumn(...)
将采用 valueProvider 返回的 HorizontalLayout,并将实际组件放入您想要的单元格中。
我写了下面的代码,我想在 Vaadin Grid 中添加带有 TextBox 和 Button 的 HorizontalLayout。但是当我 运行 代码显示输出为
com.vaadin.flow.component.orderedlayout.HorizontalLayout@145a03ea com.vaadin.flow.component.orderedlayout.HorizontalLayout@1f7acb46
package com.packagename.myapp;
import java.util.ArrayList;
import java.util.List;
import com.vaadin.flow.component.Text;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
@Route("table")
public class TestTable extends VerticalLayout {
private Grid<TblValue> grid = new Grid<>();
public TestTable() {
init();
}
private void init() {
grid.addColumn(TblValue::getLayout);
grid.setItems(createData());
add(grid);
}
private List<TblValue> createData(){
List<TblValue> data = new ArrayList<>();
data.add(new TblValue());
data.add(new TblValue());
return data;
}
private class TblValue {
HorizontalLayout layout = new HorizontalLayout();
private Text txt = new Text("test string");
private Button btn = new Button("Submit");
public TblValue() {
layout.add(txt, btn);
}
public HorizontalLayout getLayout() {
return layout;
}
public void setLayout(HorizontalLayout layout) {
this.layout = layout;
}
}
}
正如 Tatu Lund 在评论中提到的,您的问题的解决方案是使用 grid.addComponentColumn(...)
而不是 grid.addColumn(...)
。
addColumn(...)
方法将始终显示字符串。如果 valueprovider returns 任何对象,它将显示其字符串值 String.valueOf(object)
。这就是你所看到的。 com.vaadin.flow.component.orderedlayout.HorizontalLayout@145a03ea
是您调用 String.valueOf(myHorizontalLayout)
时得到的结果。
addComponentColumn(...)
将采用 valueProvider 返回的 HorizontalLayout,并将实际组件放入您想要的单元格中。