我试图在vaadin网格中模拟正常的浏览器行为,其中包括单击鼠标中键以在新选项卡中打开:
addItemClickListener(e -> {
boolean newTab = e.getMouseEventDetails().getButton() == MouseEventDetails.MouseButton.MIDDLE || e.getMouseEventDetails().isCtrlKey();
//open in window or new tab
});
但是,vaadin未注册鼠标中键。我该如何工作?
该功能已包含在vaadin-grid中(已加入Vaadin 10),在Vaadin 8中将不起作用。
对于Vaadin 8,您可以使用某些客户端扩展来拦截事件,也可以使用aComponentRenderer
将a添加Panel
到每个组件中(该方法有效,但并不理想,因为它会降低性能):
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,否则是不可能的。
文档中的以下资源可能为您提供了一个起点:创建组件扩展(仅描述使用Java代码的简单扩展)以及集成JavaScript组件和扩展(说明如何向扩展中添加本机JavaScript代码)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句