GWT комбинация клавиш управления - PullRequest
5 голосов
/ 09 декабря 2011

Я хочу обработать комбинацию клавиш ( CTRL + ENTER ), нажимаемых вместе.

Я пытался сделать это ...

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

... но это не работает. Я также пытался увидеть код этой комбинации, и он показывает 10. Поэтому я, вероятно, мог бы сделать event.getCharCode() == 10, но я думаю, что это не очень хорошая практика, тем более что в API есть такие методы, как isControlKeyDown() и другие , Каков подходящий метод отлова комбинаций клавиш?

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Несмотря на комментарий, который я написал к вашему вопросу, кажется, что лучшее событие для обработки - KeyUpEvent.В этом случае вы можете получить правильный KeyCode и проверить модификатор.То же самое относится и к KeyDownEvent, однако, поскольку пользователь удерживает нажатой клавишу CTRL , вы получите несколько KeyDownEvents в ожидании нажатия клавиши ENTER , покадолжен быть только один KeyUpEvent.

Также это решение кажется более совместимым с браузерами, чем тестирование для charCode() == 10 в KeyPressEvent.Firefox, похоже, не устанавливает charCode в 10 для CRTL + ENTER .

Вот код, который я использовал для тестирования в Chrome, 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 голосов
/ 29 сентября 2017
    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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...