Java 如何预测按键事件之后是否会出现按键类型的事件?

Java 如何预测按键事件之后是否会出现按键类型的事件?,java,keyevent,Java,Keyevent,我需要捕获关键事件(字符、移位、箭头…)并将它们转发到其他设备。 我可以收听此事件的按键和按键_释放事件。 但是,我还想听听键入的键,这样我就可以根据配置的键盘获得unicode字符了 我有这个计划: package keyboard2AndroidUSB; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scen

我需要捕获关键事件(字符、移位、箭头…)并将它们转发到其他设备。 我可以收听此事件的
按键
按键_释放
事件。 但是,我还想听听键入的
,这样我就可以根据配置的键盘获得unicode字符了

我有这个计划:

package keyboard2AndroidUSB;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;

public class Keyboard2AndroidUSB extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Keyboard");
        Scene scene = new Scene(new Label(), 300, 275);
        primaryStage.setScene(scene);

        scene.setOnKeyPressed((KeyEvent e) -> System.out.println("KEY_PRESSED, code: " + e.getCode()));
        scene.setOnKeyReleased((KeyEvent e) -> System.out.println("KEY_RELEASED, code: " + e.getCode()));
        scene.setOnKeyTyped((KeyEvent e) -> System.out.println("KEY_TYPED, char: " + e.getCharacter()));

        primaryStage.show();
    }

    public static void main(String[] args) { launch(args); }
}
如果我按shift,然后按right,然后松开shift,然后松开shift, 我得到了需要转发到其他设备的事件

KEY_PRESSED, code: SHIFT
KEY_PRESSED, code: RIGHT
KEY_RELEASED, code: RIGHT
KEY_RELEASED, code: SHIFT
按“8”键,我得到这三个事件。 在这里,我需要将键入的
键事件转发到其他设备,但放弃按下的
键和释放的
键事件。
(以便其他设备仅处理一个“8”,而不是两个)

要在我的瑞士-法语键盘中键入“')字符,我需要按Shift+8。 这样,我得到了这五个事件。 在这里,我需要转发
键键入的
事件',以及
移位
代码的
键按下
键释放
事件, 但是我确实需要为DIGIT8代码丢弃按下的
键和释放的
键事件。
(因为系统已经根据键盘配置解释了该序列,而我的另一台设备已经获得了键入的
事件)


因此,当我得到一个按下
键的事件时,我如何预测我是否也会收到一个键入
键的事件?
(然后我可以决定转发或放弃按下的
键事件)


ps:我迫不及待地要接收“释放的<代码>键”事件才能做出决定,因为按住一个键一段时间会产生许多按下的<代码>键和根据快速键盘配置键入的<代码>键,完成后只释放了一个<代码>键。

也许我对这个问题的理解很幼稚,但是,您是否不必定义一组“修改键”和一组“字符键”,然后枚举不生成有效键类型事件的组合?如果当前按下的键是
shift+z
,我们可以说我们将得到一个键入的键。如果当前键为
ctrl+z
我们不会?这取决于键盘配置。我不能事先知道。基本上,我想把这个应用程序的一部分用web/javascript编写,移植到java中:哦,我知道了。基本上,我只需要转发带有“控制”代码的按键事件,所以代码从1到47,除了32(空格)。并放弃按下rest键的事件。
KEY_PRESSED, code: DIGIT8
KEY_TYPED, char: 8
KEY_RELEASED, code: DIGIT8
KEY_PRESSED, code: SHIFT
KEY_PRESSED, code: DIGIT8
KEY_TYPED, char: (
KEY_RELEASED, code: DIGIT8
KEY_RELEASED, code: SHIFT