如何预测key_pressed事件是否会跟随key_typed事件?

时间:2015-10-01 21:29:34

标签: java keyevent

我需要捕获关键事件(字符,移位,箭头......)并将它们转发到另一个设备。 我可以听取KEY_PRESSEDKEY_RELEASE事件。 但是,我也想听KEY_TYPED,所以我已经根据配置的键盘获得了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键,然后按向右键,然后释放shift,然后释放shift, 我完全得到了转发到其他设备所需的事件。

KEY_PRESSED, code: SHIFT
KEY_PRESSED, code: RIGHT
KEY_RELEASED, code: RIGHT
KEY_RELEASED, code: SHIFT

按下'8'键,我得到了这三个事件。 在这里,我需要将KEY_TYPED事件转发给其他设备,但丢弃KEY_PRESSEDKEY_RELEASED事件。 (这样其他设备只处理一个'8'而不是两个)

KEY_PRESSED, code: DIGIT8
KEY_TYPED, char: 8
KEY_RELEASED, code: DIGIT8

要在我的瑞士法语键盘中输入')'字符,我需要按Shift + 8。 这样做,我得到了这五个事件。 在这里,我需要转发KEY_TYPED事件')'以及KEY_PRESSEDKEY_RELEASED代码的SHIFTKEY_PRESSED事件, 但我绝对需要丢弃DIGIT8代码的KEY_RELEASEDKEY_TYPED事件。 (因为系统已经根据键盘配置解释了这个序列,而我的其他设备已经获得了KEY_PRESSED, code: SHIFT KEY_PRESSED, code: DIGIT8 KEY_TYPED, char: ( KEY_RELEASED, code: DIGIT8 KEY_RELEASED, code: SHIFT 事件)

KEY_PRESSED

因此,当我收到KEY_TYPED事件时,如何预测我是否也会收到KEY_PRESSED事件? (然后我可以决定转发或放弃KEY_RELEASED事件)

ps:我迫不及待想要接收KEY_PRESSED事件以便做出决定,因为根据速度键盘配置按住键一段时间会产生许多KEY_TYPEDKEY_RELEASED ,完成后只有一个<http:listener-config name=“HTTP_IN" host=“localhost" port="12344" doc:name=“IN_EP" /> <http:request-config name=“HTTP_OUT" host=“localhost" port="8380" doc:name=“OUT_EP"/> <flow name="test2Flow2"> <http:listener config-ref=“HTTP_IN" path="*" doc:name="IN"/> <logger level="INFO" doc:name="Request Logger"/> <http:request config-ref=“HTTP_OUT" path="#[message.inboundProperties.'http.request.path']" method="#[message.inboundProperties.'http.method']" doc:name="OUT" followRedirects="false" /> <response> <logger level="INFO" doc:name="Response Logger"/> </response> </flow>

0 个答案:

没有答案