2011-12-09 26 views
5

Birbirlerine basıldığında, bir tuş kombinasyonu (CTRL + ENTER) işlemlerini yapmak istiyorum.GWT taşıma tuş bileşimi

Bunu yapmaya çalıştık

...

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

... ama çalışmıyor. Ben de bu kombinasyonun kodunu görmeye çalıştım ve 10 gösterir. Bu yüzden muhtemelen event.getCharCode() == 10 yapabilirdim ama bu çok iyi bir uygulama değil, özellikle API içinde isControlKeyDown() ve diğerleri gibi yöntemler olduğundan, düşünüyorum. Anahtar kombinasyonları yakalamak için uygun yöntem nedir?

+0

sen kullanımı vardır olay: İşte

Chrome, IE8 ve FF8 içinde test etmek için kullanılan bazı koddur? Anahtarları yakalamaya çalışırken KeyPressEvent işlemek en iyisidir. –

+0

KeyPressEvent'i KeyPressHandler – maks

+0

ile yakalamaya çalışıyorum Bu, JS anahtar olaylarını test etmek için güzel bir sayfadır: http://www.quirksmode.org/js/keys.html. En altta anahtar olayları test edebilirsiniz; Birkaç farklı tarayıcıyla test etmeniz gerekecek. GWT değil ama yararlı buldum. –

cevap

3

Sorunuza yazdığım yoruma rağmen, daha iyi olacağı olayın KeyUpEvent olduğu anlaşılıyor. Bu durumda doğru KeyCode'u alabilir ve değiştiriciyi test edebilirsiniz. Aynı durum kullanıcı aşağı CTRL anahtarı tutuyor olarak, yalnızca tek bir KeyUpEvent olması gerekirken onları ENTER tuşuna bekleyen KeyDownEvents birden alacak, ancak, KeyDownEvent için de geçerlidir.

Ayrıca bu çözüm, 'da charCode() == 10 için test edilmekten daha fazla tarayıcılar arası uyumlu görünüyor. Firefox, charCode'u CRTL + ENTER ENTER için ayarlamıyor gibi görünmüyor.

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);