2017-01-16 81 views
1

我使用的是vaadin tree table,我想爲滿足某些業務條件的某些行設置第一列colspan(等於表中列的總數)。對於表格行的其餘部分,單個列將正常顯示。
我試過使用生成的列,並通過設置明確的列寬,也有組合列;但是這樣做會更改所有行/列的佈局。請建議我們如何實現這一目標。
謝謝!Vaadin表| |如何設置colspan

回答

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 { 
} 
} 
+1

' TreeTable#setColumnExpandRatio(String columnName,float value)'將更新所有行的列寬。我的要求是擴大一些行的一些單元格的寬度(而不是所有的行)。謝謝。 – masT

+0

TBH,我不認爲這是可能實現的。列的寬度是「全局」,因此您無法將其設置爲特定行。我看過的所有表格都是「對齊」的。你可以嘗試一下樹形網格插件。它擴展了網格,可以更好地調整網格或創建分組列。否則,我認爲你可能會重新考慮你的用戶界面。如果你有圖表或計劃,它肯定會有所幫助。 –

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