gpt4 book ai didi

events - GWT 处理组合键

转载 作者:行者123 更新时间:2023-12-04 20:52:53 25 4
gpt4 key购买 nike

我想处理同时按下的组合键 (CTRL+ENTER)。

我试过这样做...

if ((event.getCharCode() == KeyCodes.KEY_ENTER)
&& event.isControlKeyDown()) {
//do smth...
}

...但它不起作用。我也试过查看这个组合的代码,它显示 10。所以我可能会做 event.getCharCode() == 10但我认为这不是很好的做法,特别是因为 API 中有 isControlKeyDown() 这样的方法。和别的。捕获组合键的适当方法是什么?

最佳答案

尽管我对你的问题写了评论,但似乎更好的事件是 KeyUpEvent .在这种情况下,您可以获得正确的 KeyCode并测试修改器。同样的情况适用于 KeyDownEvent ,然而,当用户按住 CTRL 键时,你会得到多个 KeyDownEvents等待他们按下 ENTER 键,而应该只有一个 KeyUpEvent .

此外,此解决方案似乎比 charCode() == 10 的测试更具跨浏览器兼容性。在 KeyPressEvent . Firefox 似乎没有将 CRTL+ENTER 的 charCode 设置为 10。

这是我用来在 Chrome、IE8 和 FF8 中测试的一些代码:

package com.test.gwt.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;

/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class GwtTest implements EntryPoint {

private TextArea messages;

/**
* This is the entry point method.
*/
public void onModuleLoad() {
// Add the textbox to receive events and a place to write messages
final TextBox nameField = new TextBox();
nameField.setText("");

messages = new TextArea();
messages.setText("");

RootPanel.get().add(nameField);
RootPanel.get().add(messages);
messages.setSize("75%", "400px");

// Focus the cursor on the name field when the app loads
nameField.setFocus(true);
nameField.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
printMessage("KeyUpEvent",
event.getNativeKeyCode(),
event.isAnyModifierKeyDown(),
event.isControlKeyDown());
}
});

nameField.addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
printMessage( "KeyPressEvent",
event.getCharCode(),
event.isAnyModifierKeyDown(),
event.isControlKeyDown());
}
});

nameField.addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
printMessage( "KeyDownEvent",
event.getNativeKeyCode(),
event.isAnyModifierKeyDown(),
event.isControlKeyDown() );
}
});
}

public void printMessage(String eventName, int code, boolean modifier, boolean control) {
final NumberFormat formatter = NumberFormat.getDecimalFormat();
String message = eventName + " - Char Code: " + formatter.format(code) + ". ";

if(code == KeyCodes.KEY_ENTER) {
message += "Key is ENTER. ";
}

if(modifier)
message += "Modifier is down. ";

if(control)
message += "CTRL is down. ";

messages.setText(messages.getText() + "\n\n" + message );
}
}

关于events - GWT 处理组合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8448902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com