Я использую vaadin tree table, и я хочу установить столбец 1-го столбца (равный общему числу столбцов в таблице) для некоторых строк, удовлетворяющих некоторым бизнес-критериям. Для остальных строк таблицы отдельные столбцы отображаются нормально.
Я пробовал использовать сгенерированные столбцы и устанавливал явную ширину столбца, а также с помощью составных столбцов; но при этом изменяется макет для всех строк/столбцов. Просьба предложить, как мы это добьемся.
Спасибо!Vaadin стол | Как установить colspan
1
A
ответ
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 {
}
}
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
});
' TreeTable # setColumnExpandRatio (String columnName, float value) 'будет обновлять ширину столбца для всех строк. Мое требование - расширить ширину для некоторых ячеек для некоторых строк (не для всех строк). Благодарю. – masT
TBH, я не думаю, что этого можно добиться. Ширина столбца «глобальная», поэтому вы не можете установить ее для определенной строки. Все таблицы, которые я видел, столбцы «выровнены». Что вы могли бы попробовать добавить в дерево-сетку. Он расширяет сетку, и это может улучшить ее настройку или создать сгруппированный столбец. В противном случае я думаю, что вы можете пересмотреть свой интерфейс. Если у вас есть схема или схема, это определенно поможет. –