귀하의 질문에 쓴 의견에도 불구하고, 처리 할 더 좋은 이벤트는 KeyUpEvent
입니다. 이 경우 올바른 KeyCode
을 얻고 수정자를 테스트 할 수 있습니다. 같은 상황은 사용자가 아래로 CTRL 키를 보유하고, 당신은 단지 하나의 KeyUpEvent
이 있어야 동안 그들을의 이 Enter 키를 눌러 대기 KeyDownEvents
여러 얻을 것이다, 그러나, KeyDownEvent
적용됩니다.
또한이 솔루션은 브라우저 범위가 charCode() == 10
인 KeyPressEvent
을 테스트하는 것보다 브라우저 간 호환 가능성이 높습니다. Firefox는 에 대해 charCode를 10으로 설정하지 않는 것으로 보입니다. CRTL + ENTER.
이
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);
}
}
당신이 처리하는 이벤트 : 여기
내가 크롬, IE8 및 FF8에서 테스트하는 데 사용되는 일부 코드? Enter 키를 잡으려고 할 때 KeyPressEvent를 처리하는 것이 가장 좋습니다. –KeyPressHandler로 KeyPressEvent를 잡으려고합니다. – maks
JS 키 이벤트를 테스트하기에 좋은 페이지입니다 : http://www.quirksmode.org/js/keys.html. 맨 아래에서 주요 이벤트를 테스트 할 수 있습니다. 몇 가지 다른 브라우저로 테스트해야합니다. 그것이 GWT가 아니라고 인정했지만 유용하다고 생각했습니다. –