Элемент Vaadin Grid не показывает многострочные строки

С помощью Vaadin Grid я хочу генерировать многострочные ячейки для каждой ячейки, у которой больше содержимого в ячейке, которая перекрывает его ширину.

Я уже пробовал:

  • java \n новый символ строки и стили CSS, такие как white-space: pre;, но он, похоже, не работает. (Это решение работает для таблицы)

  • настраиваемый рендерер setRenderer(HtmlRenderer) с тегами </br> и различными настройками отображения CSS

Желаемый результат: Требуемый результат, реализованный с помощью таблицы Vaadin

Ответы

Ответ 1

Vaadin Grid по-прежнему не имеет встроенной поддержки многострочных столбцов, но вы можете попробовать импровизацию, например, я предлагаю посмотреть обсуждение форума Vaadin по ссылке: Сетка - отображение нескольких строк в одной ячейке

Также вы можете попробовать создать собственный рендеринг для Grid.

Ответ 2

Для людей с большим текстом в столбцах и которые хотят отображать большие данные в столбцах Grid без их отсечки по умолчанию:

  • Добавьте имя стиля в свою сетку:

    grid.addStyleName("commentsGrid");

  • Добавьте имена стилей в свои строки и ячейки, если вы хотите их настроить:

    grid.setRowStyleGenerator(rowRef -> {// Java 8
        return "bigRows";
    }); 
    

    и

    grid.setCellStyleGenerator(new Grid.CellStyleGenerator(){
         @Override
         public String getStyle(CellReference cellReference) {
             return "bigCell";
         }
    });
    
  • Для меня столбец проблем - комментарии. Таким образом, окружайте текст тегом p с оберткой класса стилей и фиксированной шириной.

    Converter<String, String> commentsConverter = new Converter<String,  String>(){
            @Override
            public String convertToModel(String value, Class<? extends String> targetType, Locale locale)
                    throws com.vaadin.data.util.converter.Converter.ConversionException {
    
                return value;
            }
    
            @Override
            public String convertToPresentation(String value, Class<? extends String> targetType, Locale locale)
                    throws com.vaadin.data.util.converter.Converter.ConversionException {
                if(value !=null){
                    return "<p class=\"wrap\">"+value+"</p>";
                }else{
                    return "";
                }
            }
    
            @Override
            public Class<String> getModelType() {
                return String.class;
            }
    
            @Override
            public Class<String> getPresentationType() {
                return String.class;
            }
    
        };
        grid.getColumn("comments").setRenderer(new HtmlRenderer(), commentsConverter);
        grid.getColumn("comments").setWidth(700d);
    
  • Затем я назвал классы, упомянутые выше, следующим образом:

    .commentsGrid td{
        height:150px !important;
     }
    
    p.wrap{
      width: 45em;
      word-wrap: break-word;
      word-break: break-all;
      white-space: normal; 
    }
    

И я получил результат следующим образом:

Я не ниндзя CSS, поэтому вы можете сделать его более красивым, чем это.

введите описание изображения здесь

Если вам не нравятся все строки с одинаковыми большими высотами, вы можете рассчитать rowHeights на лету, а затем установить их на шаге 2. Я не уверен на 100%.

Ответ 3

Вы пытались добавить средство визуализации стилей в свои ceolumns для добавления пользовательского класса css, где вы можете разместить определенную высоту?

Пример:

Java:

grid.setCellStyleGenerator(cellRef -> // Java 8
    "heigher");

CSS

.v-grid-cell.heigher {
    height: 10em;
}

Пример: https://vaadin.com/docs/-/part/framework/components/components-grid.html