2011-12-09 2 views
5

키 조합 (CTRL + ENTER)을 함께 처리하고자합니다.GWT 처리 키 조합

내가이 일을 시도했습니다

...

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

...하지만 그것은 작동하지 않습니다. 나는 또한이 조합의 코드를 보려고 노력했는데 그것은 10을 보여준다. 그래서 나는 아마도 event.getCharCode() == 10을 할 수 있었지만, 이것은 API에 isControlKeyDown() 등과 같은 메소드가 있기 때문에별로 좋지 않은 것으로 생각한다. 키 조합을 잡는 적절한 방법은 무엇입니까?

+0

당신이 처리하는 이벤트 : 여기

내가 크롬, IE8 및 FF8에서 테스트하는 데 사용되는 일부 코드? Enter 키를 잡으려고 할 때 KeyPressEvent를 처리하는 것이 가장 좋습니다. –

+0

KeyPressHandler로 KeyPressEvent를 잡으려고합니다. – maks

+0

JS 키 이벤트를 테스트하기에 좋은 페이지입니다 : http://www.quirksmode.org/js/keys.html. 맨 아래에서 주요 이벤트를 테스트 할 수 있습니다. 몇 가지 다른 브라우저로 테스트해야합니다. 그것이 GWT가 아니라고 인정했지만 유용하다고 생각했습니다. –

답변

3

귀하의 질문에 쓴 의견에도 불구하고, 처리 할 더 좋은 이벤트는 KeyUpEvent입니다. 이 경우 올바른 KeyCode을 얻고 수정자를 테스트 할 수 있습니다. 같은 상황은 사용자가 아래로 CTRL 키를 보유하고, 당신은 단지 하나의 KeyUpEvent이 있어야 동안 그들을의 Enter 키를 눌러 대기 KeyDownEvents 여러 얻을 것이다, 그러나, KeyDownEvent 적용됩니다.

또한이 솔루션은 브라우저 범위가 charCode() == 10KeyPressEvent을 테스트하는 것보다 브라우저 간 호환 가능성이 높습니다. 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); 
    } 
} 
0
RichTextArea noteTextEditor = new RichTextArea(); 

    noteTextEditor.setVisible(true); 

    noteTextEditor.addKeyDownHandler(new KeyDownHandler() 
    { 
     @Override 
     public void onKeyDown(KeyDownEvent event) 
     { 

      if(event.isControlKeyDown()) 
      { 
       if(event.getNativeKeyCode() ==KeyCodes.KEY_SPACE) 
       { 
        Window.alert("CTRL+SHIFT"); 
       } 
      } 
     } 
    }); 
    RootPanel.get("gwtContainer").add(noteTextEditor);