栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java将字符串转换为KeyEvent

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java将字符串转换为KeyEvent

我基本上是在用荣耀的

switch
声明。简单快捷:

import static java.awt.event.KeyEvent.*;public class Keyboard {    private Robot robot;    public static void main(String... args) throws Exception {        Keyboard keyboard = new Keyboard();        keyboard.type("Hello there, how are you?");    }    public Keyboard() throws AWTException {        this.robot = new Robot();    }    public Keyboard(Robot robot) {        this.robot = robot;    }    public void type(CharSequence characters) {        int length = characters.length();        for (int i = 0; i < length; i++) { char character = characters.charAt(i); type(character);        }    }    public void type(char character) {        switch (character) {        case 'a': doType(VK_A); break;        case 'b': doType(VK_B); break;        case 'c': doType(VK_C); break;        case 'd': doType(VK_D); break;        case 'e': doType(VK_E); break;        case 'f': doType(VK_F); break;        case 'g': doType(VK_G); break;        case 'h': doType(VK_H); break;        case 'i': doType(VK_I); break;        case 'j': doType(VK_J); break;        case 'k': doType(VK_K); break;        case 'l': doType(VK_L); break;        case 'm': doType(VK_M); break;        case 'n': doType(VK_N); break;        case 'o': doType(VK_O); break;        case 'p': doType(VK_P); break;        case 'q': doType(VK_Q); break;        case 'r': doType(VK_R); break;        case 's': doType(VK_S); break;        case 't': doType(VK_T); break;        case 'u': doType(VK_U); break;        case 'v': doType(VK_V); break;        case 'w': doType(VK_W); break;        case 'x': doType(VK_X); break;        case 'y': doType(VK_Y); break;        case 'z': doType(VK_Z); break;        case 'A': doType(VK_SHIFT, VK_A); break;        case 'B': doType(VK_SHIFT, VK_B); break;        case 'C': doType(VK_SHIFT, VK_C); break;        case 'D': doType(VK_SHIFT, VK_D); break;        case 'E': doType(VK_SHIFT, VK_E); break;        case 'F': doType(VK_SHIFT, VK_F); break;        case 'G': doType(VK_SHIFT, VK_G); break;        case 'H': doType(VK_SHIFT, VK_H); break;        case 'I': doType(VK_SHIFT, VK_I); break;        case 'J': doType(VK_SHIFT, VK_J); break;        case 'K': doType(VK_SHIFT, VK_K); break;        case 'L': doType(VK_SHIFT, VK_L); break;        case 'M': doType(VK_SHIFT, VK_M); break;        case 'N': doType(VK_SHIFT, VK_N); break;        case 'O': doType(VK_SHIFT, VK_O); break;        case 'P': doType(VK_SHIFT, VK_P); break;        case 'Q': doType(VK_SHIFT, VK_Q); break;        case 'R': doType(VK_SHIFT, VK_R); break;        case 'S': doType(VK_SHIFT, VK_S); break;        case 'T': doType(VK_SHIFT, VK_T); break;        case 'U': doType(VK_SHIFT, VK_U); break;        case 'V': doType(VK_SHIFT, VK_V); break;        case 'W': doType(VK_SHIFT, VK_W); break;        case 'X': doType(VK_SHIFT, VK_X); break;        case 'Y': doType(VK_SHIFT, VK_Y); break;        case 'Z': doType(VK_SHIFT, VK_Z); break;        case '`': doType(VK_BACK_QUOTE); break;        case '0': doType(VK_0); break;        case '1': doType(VK_1); break;        case '2': doType(VK_2); break;        case '3': doType(VK_3); break;        case '4': doType(VK_4); break;        case '5': doType(VK_5); break;        case '6': doType(VK_6); break;        case '7': doType(VK_7); break;        case '8': doType(VK_8); break;        case '9': doType(VK_9); break;        case '-': doType(VK_MINUS); break;        case '=': doType(VK_EQUALS); break;        case '~': doType(VK_SHIFT, VK_BACK_QUOTE); break;        case '!': doType(VK_EXCLAMATION_MARK); break;        case '@': doType(VK_AT); break;        case '#': doType(VK_NUMBER_SIGN); break;        case '$': doType(VK_DOLLAR); break;        case '%': doType(VK_SHIFT, VK_5); break;        case '^': doType(VK_CIRCUMFLEX); break;        case '&': doType(VK_AMPERSAND); break;        case '*': doType(VK_ASTERISK); break;        case '(': doType(VK_LEFT_PARENTHESIS); break;        case ')': doType(VK_RIGHT_PARENTHESIS); break;        case '_': doType(VK_UNDERSCORE); break;        case '+': doType(VK_PLUS); break;        case 't': doType(VK_TAB); break;        case 'n': doType(VK_ENTER); break;        case '[': doType(VK_OPEN_BRACKET); break;        case ']': doType(VK_CLOSE_BRACKET); break;        case '\': doType(VK_BACK_SLASH); break;        case '{': doType(VK_SHIFT, VK_OPEN_BRACKET); break;        case '}': doType(VK_SHIFT, VK_CLOSE_BRACKET); break;        case '|': doType(VK_SHIFT, VK_BACK_SLASH); break;        case ';': doType(VK_SEMIcolon); break;        case ':': doType(VK_colon); break;        case ''': doType(VK_QUOTE); break;        case '"': doType(VK_QUOTEDBL); break;        case ',': doType(VK_COMMA); break;        case '<': doType(VK_SHIFT, VK_COMMA); break;        case '.': doType(VK_PERIOD); break;        case '>': doType(VK_SHIFT, VK_PERIOD); break;        case '/': doType(VK_SLASH); break;        case '?': doType(VK_SHIFT, VK_SLASH); break;        case ' ': doType(VK_SPACE); break;        default: throw new IllegalArgumentException("Cannot type character " + character);        }    }    private void doType(int... keyCodes) {        doType(keyCodes, 0, keyCodes.length);    }    private void doType(int[] keyCodes, int offset, int length) {        if (length == 0) { return;        }        robot.keyPress(keyCodes[offset]);        doType(keyCodes, offset + 1, length - 1);        robot.keyRelease(keyCodes[offset]);    }}

如果要进行一些自定义键键入,则可以扩展该类并重写该type(char)方法。例如:

import static java.awt.event.KeyEvent.*;public class WindowUnipreKeyboard extends Keyboard {    private Robot robot;    public WindowUnipreKeyboard(Robot robot) {        super(robot);        this.robot = robot;    }    @Override    public void type(char character) {        try { super.type(character);        } catch (IllegalArgumentException e) { String unipreDigits = String.valueOf(Character.getCodePoint(character)); robot.keyPress(VK_ALT); for (int i = 0; i < unipreDigits.length(); i++) {     typeNumPad(Integer.parseInt(unipreDigits.substring(i, i + 1))); } robot.keyRelease(VK_ALT);        }    }    private void typeNumPad(int digit) {        switch (digit) {        case 0: doType(VK_NUMPAD0); break;        case 1: doType(VK_NUMPAD1); break;        case 2: doType(VK_NUMPAD2); break;        case 3: doType(VK_NUMPAD3); break;        case 4: doType(VK_NUMPAD4); break;        case 5: doType(VK_NUMPAD5); break;        case 6: doType(VK_NUMPAD6); break;        case 7: doType(VK_NUMPAD7); break;        case 8: doType(VK_NUMPAD8); break;        case 9: doType(VK_NUMPAD9); break;        }    }}

当然,还有改进的余地,但是你知道了。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/441800.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号