我需要捕获关键事件(字符,移位,箭头......)并将它们转发到另一个设备。
我可以听取KEY_PRESSED
和KEY_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_PRESSED
和KEY_RELEASED
事件。
(这样其他设备只处理一个'8'而不是两个)
KEY_PRESSED, code: DIGIT8
KEY_TYPED, char: 8
KEY_RELEASED, code: DIGIT8
要在我的瑞士法语键盘中输入')'字符,我需要按Shift + 8。
这样做,我得到了这五个事件。
在这里,我需要转发KEY_TYPED
事件')'以及KEY_PRESSED
和KEY_RELEASED
代码的SHIFT
和KEY_PRESSED
事件,
但我绝对需要丢弃DIGIT8代码的KEY_RELEASED
和KEY_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_TYPED
和KEY_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>
。