当用户按住某个键(Ctrl)然后同时单击鼠标按钮(Ctrl +鼠标单击)时,我想要在Label上处理事件,比如打开一些窗口等... 我怎么能在GWT中做到这一点?我应该添加两个处理程序还是可以用一个处理程序?
人
答案 0 :(得分:2)
在点击处理程序中,您可以检查在触发事件时是否按下了Ctrl键,请参阅下面的示例。您还可能想要检查用户单击的特定鼠标按钮。我还在示例中添加了:
yourLabel.addClickHandler(new ClickHandler() {
if(NativeEvent.BUTTON_LEFT == event.getNativeButton() &&
event.isControlKeyDown()) {
//do what you want
}
});
或者对于旧版本的GWT而不是event.isControlKeyDown
使用event.getNativeEvent().getCtrlKey()
,如果在触发此事件时按下控制键,则返回布尔值true。
答案 1 :(得分:0)
编辑:此代码有问题,请查看Hilbrand的答案
说实话,我认为你不能用1或2个处理程序来做。我想你需要3个处理程序。
KeyUpHandler,用于重置KeyDownHandler中布尔值的值
boolean ctrlPressed;
yourLabel.addDomHandler(new KeyDownHandler() {
public void onKeyDown(KeyDownEvent event) {
if(event.getAssociatedType().equals(KeyCodes.KEY_CTRL))
ctrlPressed=true;
}
}, KeyDownEvent.getType());
yourLabel.addDomHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
if(event.getAssociatedType().equals(KeyCodes.KEY_CTRL))
ctrlPressed=false;
}
}, KeyUpEvent.getType());
yourLabel.addClickHandler(new ClickHandler() {
if(ctrlPressed) {
//do what you want
}
});