将复选框添加到 Vaadin 网格

问题描述

我在 Vaadin 14 中使用解析器构建了一个网格以从文件提取,如下所示:

 Grid<String[]> grid = new Grid<>();
        
        try {
            List<String[]> entries = reader.readAll();
            
            // Assume the first row contains headers
            String[] headers = entries.get(0);
            
            for (int i = 0; i < headers.length-1; i++) {
                final int columnIndex = i;
                String header = headers[i];
                String humanReadableHeader = SharedUtil.camelCasetoHumanFriendly(header);
                grid.addColumn(str -> str[columnIndex]).setHeader(humanReadableHeader).setSortable(true).setWidth("100px");
                
            }
            
            grid.setItems(entries.subList(1,entries.size()));

我接下来要做的是向每一行添加一个复选框,以返回相应行中数据的可视化。所以我的问题有两个方面:

  1. 是否已经存在通过单击行上的任意位置来模拟此行为的功能
  2. 如果没有,初始化网格以适应这种情况的最佳方法是什么?

解决方法

只需添加一个组件列:

Grid<String[]> grid = new Grid<>();
  
try {
    List<String[]> entries = reader.readAll();
        
    // Assume the first row contains headers
    String[] headers = entries.get(0);
        
    for (int i = 0; i < headers.length-1; i++) {
       final int columnIndex = i;
       String header = headers[i];
       String humanReadableHeader = SharedUtil.camelCaseToHumanFriendly(header);
       grid.addColumn(str -> str[columnIndex]).setHeader(humanReadableHeader).setSortable(true).setWidth("100px");
    }
        
     // Here goes your checkbox column
     grid.addComponentColumn(item -> {
       // Create the checkbox 
     }).setHeader("<the header>");

    grid.setItems(entries.subList(1,entries.size()));