Je vois ce que vous essayez faire. Aucune des autres réponses n'est correcte.
Vous voulez obtenir la constante "correcte" KeyEvent
pour un caractère donné, et vous voulez le faire sans avoir à écrire une sorte de table de recherche qui serait une longueur de zillion.
En effet, la réflexion vous aidera ici. Ce sera raisonnablement lent. Mais ça va faire le boulot. Si le travail a réellement besoin de faire est une autre question.:-)
La fonction en question que vous voulez est probablement quelque chose comme ceci:
/**
* If possible, returns an {@code int} equal to one of the {@code public
* static final int} constants present in the {@link KeyEvent} class
* whose names start with {@code VK_}.
*
* <p>This implementation does no error handling whatsoever and has not
* been tested or compiled.</p>
*
* <p>This method is placed explicitly in the public domain.</p>
*
* @param c the character to use while searching for a field; no attempt
* will be made by this implementation to validate it in any way
*
* @return a {@link KeyEvent} constant whose name starts with {@code VK_}
*
* @exception Exception for any of a number of possible reasons
*/
public int getKeyEventConstant(final char c) throws Exception {
final Field field = KeyEvent.class.getField(String.format("VK_%S", Character.valueOf(c)));
assert field != null;
return field.getInt(null);
}
Ensuite, vous pouvez le nourrir comme suit, bien que vous aurez toutes sortes de problèmes si le String
fourni contient des caractères la fonction I décrit ci-dessus n'est pas modifié pour gérer les exceptions correctement:
public toKeyEventCodes(final String s) {
int[] returnValue = null;
if (s != null && !s.isEmpty()) {
final Collection<Integer> codes = new ArrayList<Integer>(s.length());
final char[] chars = s.toCharArray();
assert chars != null;
assert chars.length > 0;
for (final char c : chars) {
if (!Character.isWhitespace(c)) { // TODO: weed out other obvious dumb chars
codes.add(Integer.valueOf(getKeyEventConstant(c)));
}
}
returnValue = codes.toArray(new int[codes.size()]);
}
if (returnValue == null) {
returnValue = new int[0];
}
return returnValue;
}
Tout ce code est non testé. Bonne chance. Je devine que vous avez encore quelque chose de trop compliqué, mais j'espère que cela vous aidera à vous orienter dans la bonne direction.
Non, ce n'est pas possible. Qu'est-ce que vous essayez d'accomplir? –
Je voudrais analyser un 'String' dans un tableau de' KeyEvent's. –
C'est certainement possible; voir ma réponse ci-dessous. Si cela devrait être fait est une autre question. :-) –