2017-01-16 11 views
1

Я использую vaadin tree table, и я хочу установить столбец 1-го столбца (равный общему числу столбцов в таблице) для некоторых строк, удовлетворяющих некоторым бизнес-критериям. Для остальных строк таблицы отдельные столбцы отображаются нормально.
Я пробовал использовать сгенерированные столбцы и устанавливал явную ширину столбца, а также с помощью составных столбцов; но при этом изменяется макет для всех строк/столбцов. Просьба предложить, как мы это добьемся.
Спасибо!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 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^