2

我想创建一个事件处理程序,它同时侦听多个键组合,例如按住CtrlC

为什么像这样的东西if((... == Control) && (... == C))不起作用?

这是我尝试使用的代码:

textField.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    public void handle(KeyEvent event) {
        if ((event.getCode() == KeyCode.CONTROL) && (event.getCode() == KeyCode.C)) {
            System.out.println("Control pressed");
        } 
    };
});
4

4 回答 4

6

你可以试试这个解决方案,它对我有用!

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

textField.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        if (keyCombinationShiftC.match(event)) {
            logger.info("CTRL + C Pressed");
        }
    }
});
于 2016-03-07T08:15:44.747 回答
5

解决此问题的一种方法是创建一个KeyCombination对象并将其一些属性设置为您在下面看到的内容。

尝试以下操作:

textfield.getScene().getAccelerators().put(new KeyCodeCombination(
    KeyCode.C, KeyCombination.CONTROL_ANY), new Runnable() {
    @Override public void run() {
        //Insert conditions here
        textfield.requestFocus();
    }
});
于 2013-11-13T07:09:51.483 回答
1

这会有一些帮助。组合键。

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

https://code.google.com/p/javafx-demos/source/browse/trunk/javafx-demos/src/main/java/com/ezest/javafx/demogallery/KeyCombinationDemo.java?r=27

于 2013-11-13T03:12:34.467 回答
0

更简洁一点(避免new KeyCombination()):

public void handle(KeyEvent event) {
    if (event.isControlDown() && (event.getCode() == KeyCode.C)) {
        System.out.println("Control+C pressed");
    } 
};

KeyEvent.isXXXDown()其他修饰键也有该类型的方法。

于 2019-04-17T22:02:21.067 回答