我需要将文本"VK_UP"
(或简单地"UP"
)更改/解析为KeyEvent.VK_UP
Java 中的常量。我不想使用该数字38
,因为它将保存在.txt
配置文件中,因此任何人都可以重写它。
最好的解决方案是拥有这个哈希图:
HashMap<String, Integer> keyConstant;
其中 key 是名称 ( "VK_UP"
),value 是键代码 ( 38
)。
现在的问题是:如何在不花费整个晚上手动创建它的情况下获得这张地图?
您可以使用反射。
在没有异常处理的情况下,以下几行中的某些内容应该可以工作:
public static int parseKeycode(String keycode) {
// We assume keycode is in the format VK_{KEY}
Class keys = KeyEvent.class; // This is where all the keys are stored.
Field key = keys.getDeclaredField(keycode); // Get the field by name.
int keycode = key.get(null); // The VK_{KEY} fields are static, so we pass 'null' as the reflection accessor's instance.
return keycode;
}
或者,您可以使用简单的单线:
KeyEvent.class.getDeclaredField(keycode).get(null);