Java Swing 实现虚拟键盘
由于业务需求需要实现一个虚拟键盘,要求能输入一些特殊字符,例如:!、#、 $、…、『、』等。
效果图:
小写输入
大写输入
特殊字符输入
由于特殊字符在KeyEvent中没有特定key值,所以在使用robot模拟输入的时候会报错,我这里的实现方式是自定义一些特殊字符,然后将点击的特殊字符插入到输入框中:
// 自定义按键
enum CustomKey {
SYMBOL(1000, "symbol"),
CONFIRM(1001, "confirm"),
S_FIRST_ONE(1002, "!"),
S_FIRST_TWO(1003, "@"),
S_FIRST_THREE(1004, "#"),
S_FIRST_FOUR(1005, "$"),
S_FIRST_FIVE(1006, "%"),
S_FIRST_SIX(1007, "^"),
S_FIRST_SEVEN(1008, "&"),
S_FIRST_EIGHT(1009, "*"),
S_FIRST_NINE(1010, "("),
S_FIRST_TEN(1011, ")"),
S_SECOND_ONE(1012, ","),
S_SECOND_TWO(1013, "."),
S_SECOND_THREE(1014, "-"),
S_SECOND_FOUR(1015, "_"),
S_SECOND_FIVE(1016, ":"),
S_SECOND_SIX(1017, ";"),
S_SECOND_SEVEN(1018, "["),
S_SECOND_EIGHT(1019, "]"),
S_SECOND_NINE(1020, "{"),
S_SECOND_TEN(1021, "}"),
S_THIRD_ONE(1022, "·"),
S_THIRD_TWO(1023, "…"),
S_THIRD_THREE(1024, "~"),
S_THIRD_FOUR(1025, "|"),
S_THIRD_FIVE(1026, "\\"),
S_THIRD_SIX(1027, "/"),
S_THIRD_SEVEN(1028, "?"),
S_THIRD_EIGHT(1029, "<"),
S_THIRD_NINE(1030, ">"),
S_FOURTH_ONE(1031, "+"),
S_FOURTH_TWO(1032, "-"),
S_FOURTH_THREE(1033, "="),
S_FOURTH_FOUR(1034, "¥"),
S_FOURTH_FIVE(1035, "∏"),
S_FOURTH_SIX(1036, "『"),
S_FOURTH_SEVEN(1037, "』"),
CLEAR(1038, "clear");
private Integer key;
private String value;
CustomKey(int key, String value) {
this.key = key;
this.value = value;
}
public Integer getKey() {
return key;
}
public void setKey(Integer key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
如果是正常的键盘按键直接通过robot模拟输入
robot.keyPress(key);
robot.keyRelease(key);
如果是特殊字符则将字符插入JTextField中
try {
// 在光标位置插入点击的字符
textField.getDocument().insertString(textField.getCaretPosition(), kb.getText(), null);
} catch (Exception e2) {
e2.printStackTrace();
}