当前,我已经为每个任务的键盘控制器配置了JavaFX keyEvents。我想要的是从属性文件中配置密钥,而不是在代码中进行硬编码。
实现:
final KeyCombination keyCombinationShiftC = new KeyCodeCombination(
KeyCode.ENTER, KeyCombination.CONTROL_DOWN);
javafx.event.EventHandler<javafx.scene.input.KeyEvent> handler = event -> {
if (keyCombinationShiftC.match(event)) {
try {
if (finalSubTotalPrice > 0) {
paymentAction();
} else {
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle(app.values.getProperty("WARNING_TITLE"));
alert.setHeaderText(app.values.getProperty("INVALID_NO_OF_ITEMS"));
alert.setContentText(app.values.getProperty("INVALID_NO_OF_ITEMS_DIALOG"));
alert.showAndWait();
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
switch (event.getCode()) {
case F10:
try {
removeAction();
} catch (Exception e1) {
e1.printStackTrace();
}
break;
case F1:
try {
searchField.requestFocus();
} catch (Exception e1) {
e1.printStackTrace();
}
break;
case F5:
try {
customVatDiscountCalculation();
} catch (Exception e1) {
e1.printStackTrace();
}
break;
}
需要在不使用属性文件更改代码的情况下将ENTER + CNTRL_DOWN,F5,F10,F1键分配给其他键。
如果我尝试从属性文件中获取字符串,则无法这样做。如下。它说这种情况需要一个常量表达式。
public static final KeyCode REMOVE_KEY = KeyCode.getKeyCode(app.values.getProperty("REMOVE_KEY"));
switch (event.getCode()) {
case REMOVE_KEY:
try {
removeAction();
} catch (Exception e1) {
e1.printStackTrace();
}
break;
}