2011-12-09 14 views
5

Desidero gestire una combinazione di tasti (CTRL + ENTER) che vengono premuti insieme.Combinazione di tasti di gestione GWT

Ho provato a fare questo ...

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

... ma non funziona. Ho provato anche per vedere il codice di questa combinazione e si vede 10. Così ho potuto probabilmente fare event.getCharCode() == 10 ma penso che non è molto buona pratica, soprattutto perché ci sono tali metodi nell'API come isControlKeyDown() e altri. Qual è il metodo appropriato per catturare le combinazioni di tasti?

+0

Quale evento sono di manovrare? Trovo che quando si cerca di catturare le chiavi di invio è meglio gestire il KeyPressEvent. –

+0

Sto cercando di catturare KeyPressEvent con KeyPressHandler – maks

+0

Questa è una bella pagina per il test JS eventi chiave: http://www.quirksmode.org/js/keys.html. In basso puoi testare eventi chiave; dovrai testare con alcuni browser diversi. Certo, non è GWT ma l'ho trovato utile. –

risposta

3

Nonostante il commento che ho scritto alla tua domanda, sembra che l'evento migliore per gestire è KeyUpEvent. In questo caso è possibile ottenere il corretto test di KeyCode e per il modificatore. La stessa situazione vale per KeyDownEvent, tuttavia, come l'utente tiene il chiave CTRL, si otterrà più KeyDownEvents aspettando di premere il INVIO chiave, mentre ci dovrebbe essere solo un singolo KeyUpEvent.

Anche questa soluzione sembra più compatibile con più browser rispetto ai test per charCode() == 10 in KeyPressEvent. Firefox non sembra per impostare il charCode a 10 per CRTL +INVIO.

Ecco il codice che ho usato per testare in Chrome, IE8, e 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); 
Problemi correlati