Est-il possible de gérer les événements MouseDown/MouseUp et KeyDown/KeyUp avec Vaadin? J'ai trouvé forum thread avec la même question et on dirait que la réponse est non, mais c'était il y a 5 ans - j'espère que quelque chose a changé avec les versions ultérieures. Pourtant, je ne trouve rien dans l'API. Peut-être qu'il y a une solution pour intercepter de tels événements?Vaadin: MouseDown/MouseUp et KeyDown/KeyUp est
0
A
Répondre
1
Eh bien, après quelques jours, j'ai trouvé la solution acceptable (pour moi). Le composant requis doit être enveloppé avec extension-interceptor (crédits à @petey pour une idée dans les commentaires) avec KeyDownHandler
à l'intérieur. Mais l'astuce est de ne pas ajouter au composant lui-même (car il peut manquer de déclenchement), mais à laRootPanel
. Alors, voici un exemple de travail.
Extension:
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;
}
}
ServerRpc:
public interface InterceptorExtensionServerRpc extends ServerRpc {
void setShiftKeyDown(boolean state);
}
Connecteur:
@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());
}
}
Ensuite, chaque fois que vous voulez, vous pouvez obtenir l'état Shift-bouton sur le côté serveur via InterceptorExtension # isShiftKeyDown.
Quelle version de Vaadin utilisez-vous, et pour quels composants vous souhaitez ajouter des écouteurs à la souris et à la clé? – Morfic
C'est possible. – petey
@Morfic, 8.1.0.beta1, Composant arbre. –