CTRL+C не работает при фокусе на TextField

Вот мой код, который задает действие для комбинации ctrl+c в JavaFX. Это не работает, когда есть фокус на TextField command_line. Почему?

public void setCtrlC() {
    command_line.getScene().getAccelerators().put(new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_ANY),
            new Runnable() {
                @Override
                public void run() {
                    LOGGER.debug("CTRL+C pressed");
                    try {
                        if (tab_toradex.isSelected()) {
                            bw.write(3);
                            bw.flush();
                        }
                        if(tab_novatel.isSelected()){
                            bw2.write(3);
                            bw2.flush();
                        }
                    } catch (IOException e) {
                        LOGGER.debug("CTRL+C command failed");
                    }
                }
            });
}

Спасибо!


person Zuzana    schedule 07.02.2017    source источник
comment
возможное решение описано в ответе на этот вопрос. Я не уверен, что есть более простое решение, чем добавление фильтра событий к сцене/корню.   -  person Itai    schedule 07.02.2017
comment
Control + C (по крайней мере, в Windows) поддерживается по умолчанию. Вы хотите регистрировать, когда пользователь пытается скопировать текст? Собственно здесь вы хотите начать новую тему? Runnable никогда не запускается...   -  person GOXR3PLUS    schedule 07.02.2017
comment
Я действительно не уверен в этом, но я думаю, что элемент управления текстовым полем имеет свои собственные ускорители, и он перехватывает ваши...   -  person Jai    schedule 07.02.2017
comment
Хорошо, теперь я, наверное, знаю, в чем проблема. TextField в первую очередь настроен для прослушивания Ctrl + C для копирования, но мне нужно переопределить это для прослушивания Ctrl + C в качестве процесса уничтожения.   -  person Zuzana    schedule 07.02.2017
comment
Обновление: есть возможность снимать фокус с TextField каждый раз, когда я нажимаю кнопку SEND, и тогда он будет работать (но все же только в том случае, если на этом TextField не будет фокуса). Тогда проблема будет заключаться в том, что мне придется нажимать на TexField каждый раз, когда мне нужно что-то написать в нем...   -  person Zuzana    schedule 07.02.2017


Ответы (1)


Хорошо, решил с этим:

final KeyCombination keyCombinationShiftC = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_DOWN);

public void setCtrlC() {

    command_line.setOnKeyPressed(new EventHandler<KeyEvent>() {

        @Override
        public void handle(KeyEvent event) {
            if (keyCombinationShiftC.match(event)) {
                LOGGER.debug("CTRL+C pressed");

                try {
                    if (tab_toradex.isSelected()) {
                        bw.write(3);
                        bw.flush();
                    }
                    if(tab_novatel.isSelected()){
                        bw2.write(3);
                        bw2.flush();
                    }
                } catch (IOException e) {
                    LOGGER.debug("CTRL+C command failed");
                }
            }
        }
    });
}

С другой стороны, теперь это работает только тогда, когда TextField сфокусирован...

person Zuzana    schedule 07.02.2017