1

我需要将文本"VK_UP"(或简单地"UP")更改/解析为KeyEvent.VK_UPJava 中的常量。我不想使用该数字38,因为它将保存在.txt配置文件中,因此任何人都可以重写它。

最好的解决方案是拥有这个哈希图:

HashMap<String, Integer> keyConstant;

其中 key 是名称 ( "VK_UP"),value 是键代码 ( 38)。

现在的问题是:如何在不花费整个晚上手动创建它的情况下获得这张地图?

4

1 回答 1

3

您可以使用反射。

在没有异常处理的情况下,以下几行中的某些内容应该可以工作:

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);
于 2013-06-28T19:25:37.970 回答