2011-12-09 5 views
5

キー(CTRL + ENTER)の組み合わせを同時に処理したいと思います。GWTハンドリングキーの組み合わせ

私は...これを行うには

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

を試してみた...しかし、それは動作しません。私はまた、この組み合わせのコードを見てみると、それは10を示しています。だから私はおそらくevent.getCharCode() == 10を行うことができますが、特にそれはAPIにisControlKeyDown()などのようなメソッドがあるので、それは非常に良い練習ではないと思う。キーの組み合わせをキャッチする適切な方法は何ですか?

+0

お取り扱いしているイベント?私は、Enterキーをキャッチしようとすると、KeyPressEventを処理するのが最善であることが分かります。 –

+0

KeyPressHandlerでKeyPressEventをキャッチしようとしています – maks

+0

これは、JSキーイベントをテストするための素晴らしいページです:http://www.quirksmode.org/js/keys.html。下部には主要なイベントをテストできます。いくつかの異なるブラウザでテストする必要があります。それがGWTではないことを認めましたが、私はそれが有用であると感じました。 –

答えて

3

あなたの質問に書いたコメントにもかかわらず、より良い対処方法はKeyUpEventです。その場合は、正しいKeyCodeを取得し、修飾子をテストすることができます。同じような状況は、ユーザーがダウンCTRLキーを保持しているとして、あなたは彼らが唯一のKeyUpEventがあるはずながらは、 ENTERキーを押すのを待っKeyDownEvents複数取得します、しかし、KeyDownEventに適用されます。

また、この解決策は、KeyPressEventcharCode() == 10のテストよりもクロスブラウザ互換です。 FirefoxはのcharCodeを10に設定していないようです。CRTL + ENTERここで

は、私はクローム、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); 
    } 
} 
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);