微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有使用 Vaadin ClickListener 事件的方法获取行号的方法?

如何解决是否有使用 Vaadin ClickListener 事件的方法获取行号的方法?

我有一个四列的网格。最后一个包含一个图像,我通过向其 ImageRenderer 添加一个 ClickListener 使其可点击。我的目标是访问该行(或其所有元素)以删除该行。

  Grid<Row> grid = new Grid<>();
 
    ...
        
        grid.addColumn(row -> row.getValue("NAME")).setCaption("NAME");
        
        grid.addColumn(row -> row.getValue("PHONE")).setCaption("PHONE");
        
        grid.addColumn(row -> row.getValue("EMAIL")).setCaption("EMAIL");
        
        ImageRenderer ir = new ImageRenderer();
            ir.addClickListener(
                    event -> {
                        System.out.println(event.getItem());
                        
                    }); 
        grid.addColumn(row -> row.getValue("icon_delete"),ir).setCaption("");

我的问题是关于 ImageRenderer 的 ClickListener: 事件有一个名为 getItem() 的方法 - 但我还没有找到一种方法获取包含单击项的行号。有没有办法做到这一点?

解决方法

为什么需要行号?您的渲染器中有该项目,从数据提供程序中将其删除并刷新。

data.remove(event.getItem());
data.refreshAll();
,

对于任何对行号有其他需求的人:

Grid 不知道行号,您需要询问数据提供者或用于为数据提供者提供数据的任何内容。那个东西可能是一个数据库或一个简单的 ArrayList,你用来生成一些虚拟数据。数据提供者的实现通常也没有查询行号的直接方法,但是如果数据提供者不是懒惰的,您可以获取整个项目列表,将其放入一个 ArrayList,然后向 ArraList 询问 {{ 1}}。对于惰性数据,您最好查询原始来源。

“这取决于您的实现”同样适用于是否有一种简单的方法可以访问任何可能影响显示顺序的潜在过滤器或比较器或 TreeGrid 项目的展开/折叠状态。您至少需要将数据提供者转换为它的实际实现类,因为通用 DataProvider 接口不提供这些方法。

在大多数情况下,行号与 Grid 的需求无关。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。