繁体   English   中英

char到KeyEvent int

[英]char to KeyEvent int

希望将字符转换为整数以与awt robot的按键控件一起使用。 我有这个解决方案,现在可以使用,但是它又长又麻烦,而且我需要添加每个可能输入的键,这很多。 有没有更简单或更整洁的方法来完成此任务? 谢谢!

(我现在使用+10000表示大写字母,我将在输入字符时进行检查,并说如果num> 10000,请按住shift键并从数字中删除10000)

public int charToNum(char character) {
    switch (character) {
        case 'a': return(KeyEvent.VK_A);
        case 'b': return(KeyEvent.VK_B);
        case 'c': return(KeyEvent.VK_C);
        case 'd': return(KeyEvent.VK_D);
        case 'e': return(KeyEvent.VK_E);
        case 'f': return(KeyEvent.VK_F);
        case 'g': return(KeyEvent.VK_G);
        case 'h': return(KeyEvent.VK_H);
        case 'i': return(KeyEvent.VK_I);
        case 'j': return(KeyEvent.VK_J);
        case 'k': return(KeyEvent.VK_K);
        case 'l': return(KeyEvent.VK_L);
        case 'm': return(KeyEvent.VK_M);
        case 'n': return(KeyEvent.VK_N);
        case 'o': return(KeyEvent.VK_O);
        case 'p': return(KeyEvent.VK_P);
        case 'q': return(KeyEvent.VK_Q);
        case 'r': return(KeyEvent.VK_R);
        case 's': return(KeyEvent.VK_S);
        case 't': return(KeyEvent.VK_T);
        case 'u': return(KeyEvent.VK_U);
        case 'v': return(KeyEvent.VK_V);
        case 'w': return(KeyEvent.VK_W);
        case 'x': return(KeyEvent.VK_X);
        case 'y': return(KeyEvent.VK_Y);
        case 'z': return(KeyEvent.VK_Z);
        case 'A': return(KeyEvent.VK_A);
        case 'B': return(10000 + KeyEvent.VK_B);
        case 'C': return(10000 + KeyEvent.VK_C);
        case 'D': return(10000 + KeyEvent.VK_D);
        case 'E': return(10000 + KeyEvent.VK_E);
        case 'F': return(10000 + KeyEvent.VK_F);
        case 'G': return(10000 + KeyEvent.VK_G);
        case 'H': return(10000 + KeyEvent.VK_H);
        case 'I': return(10000 + KeyEvent.VK_I);
        case 'J': return(10000 + KeyEvent.VK_J);
        case 'K': return(10000 + KeyEvent.VK_K);
        case 'L': return(10000 + KeyEvent.VK_L);
        case 'M': return(10000 + KeyEvent.VK_M);
        case 'N': return(10000 + KeyEvent.VK_N);
        case 'O': return(10000 + KeyEvent.VK_O);
        case 'P': return(10000 + KeyEvent.VK_P);
        case 'Q': return(10000 + KeyEvent.VK_Q);
        case 'R': return(10000 + KeyEvent.VK_R);
        case 'S': return(10000 + KeyEvent.VK_S);
        case 'T': return(10000 + KeyEvent.VK_T);
        case 'U': return(10000 + KeyEvent.VK_U);
        case 'V': return(10000 + KeyEvent.VK_V);
        case 'W': return(10000 + KeyEvent.VK_W);
        case 'X': return(10000 + KeyEvent.VK_X);
        case 'Y': return(10000 + KeyEvent.VK_Y);
        case 'Z': return(10000 + KeyEvent.VK_Z);
        case '!': return(KeyEvent.VK_EXCLAMATION_MARK);
        case ' ': return(KeyEvent.VK_SPACE);   
        default: System.out.println("Test"); return 0;
    }
}

查看源代码,KeyEvent字段的值是

public static final int VK_A = 65;
public static final int VK_B = 66;
...
public static final int VK_Z = 90;

这只是AZ的ascii值。 您可以将char转换为int以获取其ascii值,这意味着您可以执行以下操作。

public static int charToNum(char inputChar) {
    if(inputChar == '!') {
        return(KeyEvent.VK_EXCLAMATION_MARK);
    } else if (inputChar == ' ') {
        return(KeyEvent.VK_SPACE);
    }

    if (Character.isUpperCase(inputChar)) {
        return (int) inputChar + 10000;
    } else {
        return (int) inputChar - 32;
    }
}

但是,任何非字母字符都必须具有自己的特殊情况,例如感叹号和空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM