Java 从KeyEvent获取要映射的所有关键帧
是否有一种方法可以从Java 从KeyEvent获取要映射的所有关键帧,java,reflection,awt,keylistener,key-events,Java,Reflection,Awt,Keylistener,Key Events,是否有一种方法可以从java.awt.event.KeyEvent获取所有要映射的密钥 我试着使用反射,比如: for (Field f : KeyEvent.class.getDeclaredFields()) { try { map.put((int)f.getInt(f), f.getName()); } catch (IllegalArgumentExce
java.awt.event.KeyEvent
获取所有要映射的密钥
我试着使用反射,比如:
for (Field f : KeyEvent.class.getDeclaredFields()) {
try
{
map.put((int)f.getInt(f), f.getName());
}
catch (IllegalArgumentException | IllegalAccessException ex) {
Logger.getLogger(KeyCollection.class.getName()).log(Level.SEVERE, null, ex);
}
}
但我得到了:
java.lang.IllegalAccessException: Class com.util.KeyCollection can not access a member of class java.awt.event.KeyEvent with modifiers "private"
更新:下面是我使用assylias代码得到的示例:
for (Field f : KeyEvent.class.getDeclaredFields()) {
try {
if (java.lang.reflect.Modifier.isStatic(f.getModifiers()) && f.getType() == int.class && f.getName().startsWith("VK")) {
f.setAccessible(true);
map.put((int)f.get(null), f.getName());
}
} catch (IllegalArgumentException | IllegalAccessException ex) {
ex.printStackTrace();
}
}
使用您的方法,您需要首先使字段可访问:
f.setAccessible(true);
但是你尝试进入球场的方式也有问题。下面的示例运行良好,您可以根据需要进行调整:
public static void main(String[] args) {
Map<Object, String> map = new HashMap<>();
for (Field f : KeyEvent.class.getDeclaredFields()) {
try {
if (java.lang.reflect.Modifier.isStatic(f.getModifiers())) {
f.setAccessible(true);
map.put(f.get(null), f.getName());
}
} catch (IllegalArgumentException | IllegalAccessException ex) {
ex.printStackTrace();
}
}
System.out.println(map);
}
publicstaticvoidmain(字符串[]args){
Map Map=newhashmap();
对于(字段f:KeyEvent.class.getDeclaredFields()){
试一试{
if(java.lang.reflect.Modifier.isStatic(f.getModifiers())){
f、 setAccessible(true);
put(f.get(null),f.getName();
}
}捕获(IllegalArgumentException | IllegalAccessException ex){
例如printStackTrace();
}
}
系统输出打印项次(map);
}
使用您的方法,您需要首先访问字段:
f.setAccessible(true);
但是你尝试进入球场的方式也有问题。下面的示例运行良好,您可以根据需要进行调整:
public static void main(String[] args) {
Map<Object, String> map = new HashMap<>();
for (Field f : KeyEvent.class.getDeclaredFields()) {
try {
if (java.lang.reflect.Modifier.isStatic(f.getModifiers())) {
f.setAccessible(true);
map.put(f.get(null), f.getName());
}
} catch (IllegalArgumentException | IllegalAccessException ex) {
ex.printStackTrace();
}
}
System.out.println(map);
}
publicstaticvoidmain(字符串[]args){
Map Map=newhashmap();
对于(字段f:KeyEvent.class.getDeclaredFields()){
试一试{
if(java.lang.reflect.Modifier.isStatic(f.getModifiers())){
f、 setAccessible(true);
put(f.get(null),f.getName();
}
}捕获(IllegalArgumentException | IllegalAccessException ex){
例如printStackTrace();
}
}
系统输出打印项次(map);
}
请看,您知道真正的用法……还是只是为了测试purposes@mKorbel我不知道OP为什么要这么做。你应该问他。@user1010609我的好奇心,请问这个问题的真正原因是什么请你看,知道真正的用法…,还是仅仅为了测试purposes@mKorbel我不知道OP为什么要这么做。你应该问他。@user1010609我的好奇,请问这个问题的真正原因是什么