【问题标题】:CTRL+C doesn't work while focus on TextField专注于 TextField 时 CTRL+C 不起作用
【发布时间】:2017-02-07 09:04:10
【问题描述】:

这是我在 JavaFX 中为 ctrl+c 组合设置操作的代码。当专注于 TextField 命令行时,它不起作用。为什么?

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

谢谢!

【问题讨论】:

  • this question 的回答中描述了一种可能的解决方案。我不确定是否有比向场景/根添加事件过滤器更简单的解决方案。
  • Control + C(至少在 Windows 上)默认支持。您想在用户尝试复制某些文本时记录?其实在这里你想开始一个新的线程? Runnable 永远不会启动...
  • 我真的不确定,但我认为文本字段控件有自己的加速器,它正在拦截你的加速器......
  • 好的,现在我大概知道问题出在哪里了。 TextField 主要设置为侦听 ctrl+c 以进行“复制”,但我需要将其覆盖为侦听器以将 ctrl+c 设置为“终止进程”。
  • 更新:每次我按下 SEND 按钮时,都有可能从 TextField 中移除焦点,然后它就会起作用(但仍然只有在这个 TextField 上没有焦点的情况下)。那么问题是,每次我需要在其中写一些东西时,我都必须点击 TexField...

标签: javafx textfield ctrl


【解决方案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 获得焦点时才有效...

【讨论】:

    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    相关资源
    最近更新 更多