Vaadin:MouseDown/MouseUp和KeyDown/KeyUp evens
是否可以使用Vaadin处理MouseDown/MouseUp和KeyDown/KeyUp evens?我发现了同样的问题,答案似乎是否定的,但那是5年前的事了——我希望以后的版本会有所改变。我仍然在API中找不到任何东西。也许有什么办法可以拦截这样的事件?好吧,几天后,我想出了一个(对我来说)可以接受的解决方案。所需组件必须用扩展拦截器包装(注释中的想法归功于@petey),内部带有Vaadin:MouseDown/MouseUp和KeyDown/KeyUp evens,vaadin,Vaadin,是否可以使用Vaadin处理MouseDown/MouseUp和KeyDown/KeyUp evens?我发现了同样的问题,答案似乎是否定的,但那是5年前的事了——我希望以后的版本会有所改变。我仍然在API中找不到任何东西。也许有什么办法可以拦截这样的事件?好吧,几天后,我想出了一个(对我来说)可以接受的解决方案。所需组件必须用扩展拦截器包装(注释中的想法归功于@petey),内部带有KeyDownHandler。但是诀窍不是添加到组件本身(因为它可能会错过触发),而是添加到根面板。这里有一个有
KeyDownHandler
。但是诀窍不是添加到组件本身(因为它可能会错过触发),而是添加到根面板。这里有一个有效的例子
分机:
public class InterceptorExtension extends AbstractExtension {
private boolean shiftKeyDown;
public InterceptorExtension(Tree tree) {
super.extend(tree);
registerRpc((InterceptorExtensionServerRpc) state -> shiftKeyDown = state);
}
public boolean isShiftKeyDown() {
return shiftKeyDown;
}
}
服务器RPC:
public interface InterceptorExtensionServerRpc extends ServerRpc {
void setShiftKeyDown(boolean state);
}
连接器:
@Connect(InterceptorExtension.class)
public class InterceptorExtensionConnector extends AbstractExtensionConnector {
@Override
protected void extend(final ServerConnector target) {
final InterceptorExtensionServerRpc rpcProxy = getRpcProxy(InterceptorTreeExtensionServerRpc.class);
final RootPanel rootPanel = RootPanel.get();
rootPanel.addDomHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
if (event.isShiftKeyDown()) {
rpcProxy.setShiftKeyDown(true);
}
}
}, KeyDownEvent.getType());
rootPanel.addDomHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
if (!event.isShiftKeyDown()) {
rpcProxy.setShiftKeyDown(false);
}
}
}, KeyUpEvent.getType());
}
}
然后,只要您愿意,就可以通过InterceptorExtension#isShiftKeyDown在服务器端获取Shift按钮状态。您使用的是什么Vaadin版本,以及您希望为哪些组件添加鼠标和键侦听器?这是可能的。@Morfic,8.1.0.beta1,树组件。根据开箱即用项单击和上下文单击侦听器的支持,使用
向上
和向下
键导航,以及使用右
和左
键展开和折叠。如果你真的需要更多的东西(例如鼠标下移和鼠标上移,而不是点击),如果你能提供一个更详细的场景,那会很有帮助。@Morfic,好吧,至少我需要带Shift键的多选,这是开箱即用的。所以我要自己去检测换档压力。