将复选框添加到Vaadin网格中。

4

我使用解析器从文件中提取信息,构建了一个 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的方法是什么?

1
我不认为我完全理解你的问题。但是,如果你只想添加复选框,你可以使用接受 ComponentRenderer 的 addColumn 方法。 - Simon Martinelli
你是在谈论多选复选框,还是与选择状态无关的复选框? - Anna Koskinen
@SimonMartinelli 没错,那么我的问题是如何初始化网格以处理csv数据和每行数据对应的复选框。 - schaphekar
@AnnaKoskinen,这更像是单选,Grid中的每一行都有一个复选框,但只允许同时选择一个。 - schaphekar
我仍然不理解你的问题。请查看https://vaadin.com/components/vaadin-grid/java-examples/using-components - Simon Martinelli
@SimonMartinelli,因为我正在使用CSV数据构建我的网格,所以我的网格被初始化为Grid<String[]>,其中每一行对应于文件中的一行。现在,我想在每一行中添加一个复选框组件,但我不确定如何初始化网格。 - schaphekar
1个回答

4

只需添加一个组件列:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接