当前位置: 首页 > 知识库问答 >
问题:

Vaadin网格鼠标中点击

鱼意远
2023-03-14
addItemClickListener(e -> {
            boolean newTab = e.getMouseEventDetails().getButton() == MouseEventDetails.MouseButton.MIDDLE || e.getMouseEventDetails().isCtrlKey();
            //open in window or new tab
        }); 

但是,鼠标中键不是由Vaadin注册的。我怎么才能让这个起作用?

共有1个答案

茅高卓
2023-03-14

该功能包含在vaadin-grid中(它进入Vaadin10),在Vaadin8中不起作用。

对于Vaadin8,您可以使用某些客户端扩展截获事件,或者使用ComponentRenderer向每个组件添加面板(这很有效,但不理想,因为它降低了性能):

grid.addColumn(item->{
    Panel p = new Panel(item.getName());
    p.setStyleName(ValoTheme.PANEL_BORDERLESS);
    p.addClickListener(ev->{
        System.out.println(ev.getButtonName());             
    });
    return p;
}).setRenderer(new ComponentRenderer());

另一方面,客户端扩展允许监听javascript事件(例如MouseEvent)并触发服务器事件作为响应。创建扩展是一个相当复杂的主题(因为它使用API的一部分通常对开发人员隐藏),但它允许直接访问呈现的DOM,否则这是不可能的。

 类似资料:
  • 问题内容: Vaadin 7中的和组件有什么区别? 我应该使用哪个,什么时候使用? 问题答案: Grid是一个功能更强大的新组件,它应该是Table的后继组件(请参阅Table已死,Grid长寿)。因此,应该没有任何必要偏爱表格而不是网格。 这是Vaadin从表格迁移到网格的一系列文章的第一篇:https : //vaadin.com/blog/-/blogs/mission-rip- table

  • 我正在尝试在联接。但是对我来说,缺少一个功能。我为员工创建了,这些网格分为特定的部门,但有员工,这些员工仅在部门中。 不允许在一上添加。 所以结果应该是这样的: 即使< code>Vaadin不直接允许,有什么解决方案可以让我这样做吗? 因为如果我尝试过,它会引发异常

  • 是否可以将汇总行添加到Vaadin网格中? 我目前有一个网格,它有一个标题行来连接列,并在顶部提供了一个良好的概述。但是,我想在整个网格中添加类似的标题,以便标记一节的结束。似乎只能在header部分添加header,这将简单地填充网格的头部。页脚在底部也会这样做。 但是,如果我希望在网格中有一个特殊的行,而不必创建新的网格组件,该怎么办?一个可视的数据分隔符。

  • 我已经将BigDecimal属性的列添加到网格中,并希望对此类列进行排序可以开箱即用: 添加:如果不使用NumberRenderer并以正常方式添加列,那么setSortedProperty将按预期工作:

  • 我正在考虑这个问题的解决方案,但我不知道如何去做: 我的实体< code>StudentBook具有以下属性: 来自数据库的数据,它们看起来像: 字母字符可以用数值表示为 现在我想这样做: 将是学生的姓名 第一列将自动生成选定月份的天数(日期) “行”将具有点来自表-每个对应的日期 最后一行将类似于“总和行”,显示中每个学生的。 所以我创建了网格 方法返回 将学生的名字添加到各个< code >列