1

我正在使用vaadin tree table,并且我想为满足某些业务标准的某些行设置第一列 colspan (等于表中列的总数)。对于其余的表格行,各个列将正常显示。
我尝试过使用生成的列,并通过设置明确的列宽,以及使用复合列;但这样做会改变所有行/列的布局。请建议我们将如何实现这一目标。
谢谢!

4

2 回答 2

0

您可以使用com.vaadin.ui.Table.setRowGenerator

Java 8 + Vaadin 7.6.1 的示例

setRowGenerator((Table table, Object itemId) -> {
    if (itemId instanceof MyClassThatIdentifiesARowToMerge) {
        Table.GeneratedRow generatedRow = new Table.GeneratedRow("text-of-merged-cell");
        generatedRow.setSpanColumns(true);
        return generatedRow; // merge
    }
    return null; // doesn't merge
} );
于 2017-06-21T17:20:33.530 回答
0

您可以通过调用来设置列的宽度TreeTable#setColumnExpandRatio(String columnName, float value)

在下面的示例中,我将“名称”列的宽度设置为 75%。如果您不指定任何其他内容,则其余列将适合其余空间。

ttable.setColumnExpandRatio("Name", 0.75f);
ttable.setColumnExpandRatio("Number", 0.25f); //not necessary

试试下面我从 Vaadin 书中修改的例子:

@Theme("mytheme")
public class MyUI extends UI {

@Override
protected void init(VaadinRequest vaadinRequest) {
    final VerticalLayout layout = new VerticalLayout();
    layout.setSizeFull();
    TreeTable ttable = new TreeTable();

    ttable.addContainerProperty("Name", String.class, null);
    ttable.addContainerProperty("Number", Integer.class, null);

    //Add some sample data
    ttable.addItem(new Object[]{"Menu", null}, 0);
    ttable.addItem(new Object[]{"Beverages", null}, 1);
    ttable.setParent(1, 0);
    ttable.addItem(new Object[]{"Foods", null}, 2);
    ttable.setParent(2, 0);
    ttable.addItem(new Object[]{"Coffee", 23}, 3);
    ttable.addItem(new Object[]{"Tea", 42}, 4);
    ttable.setParent(3, 1);
    ttable.setParent(4, 1);
    ttable.addItem(new Object[]{"Bread", 13}, 5);
    ttable.addItem(new Object[]{"Cake", 11}, 6);
    ttable.setParent(5, 2);
    ttable.setParent(6, 2);

    ttable.setColumnExpandRatio("Name", 0.75f);
    ttable.setColumnExpandRatio("Number", 0.25f);
    ttable.setSizeFull();
    layout.addComponents(ttable);
    layout.setMargin(true);
    layout.setSpacing(true);

    setContent(layout);
}

@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet {
}
}
于 2017-01-16T11:53:04.983 回答