Как получить европейский символ "è" для нажатия клавиш, используя класс робота Java - PullRequest
0 голосов
/ 27 мая 2019

Я пишу виртуальную клавиатуру для своего приложения и использую Java-робот для имитации события нажатия каждой кнопки на клавиатуре. Все правильно, за исключением того, что я не могу найти ключевой код для европейских специальных символов, особенно итальянских. Сканирование каждого возможного кода, который я нашел, что:

à is KeyEvent.VK_DEAD_ABOVERING
ì is KeyEvent.VK_DEAD_CIRCUMFLEX
ò is KeyEvent.VK_DEAD_CEDILLA
ù is KeyEvent.VK_DEAD_GRAVE

но мне не хватает ключевого кода для "è", похоже, что ни один код не может создать этот символ.

Я также уже пытался получить отсутствующий код с помощью инструментов, которые распечатывают каждую клавишу, нажатую на физической клавиатуре, но я получаю «неизвестно» для каждого из указанных выше символов (включая «è»).

Вот фрагмент кода для проверки

package robottest;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class RobotTest {

    private static Robot robot;

    public static void main(String[] args) {
        // TODO code application logic here
        try {
            robot = new Robot();
            int keyCode = KeyEvent.VK_DEAD_CARON;
            robot.keyPress(keyCode);
            robot.keyRelease(keyCode);

        } catch (AWTException ex) {
            System.out.println("Exception"+ex);
        }
    }
}

Это минимально, вы можете скомпилировать его и запустить с

java -jar RobotTest.jar

Вот что я получаю, модифицируя свой источник, чтобы он действовал как своего рода «сканер кода» ...

package robottest;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import javafx.scene.input.KeyCode;

public class RobotTest {

    private static Robot robot;

    public static void main(String[] args) {
        // TODO code application logic here
        try {
            robot = new Robot();
/*            int keyCode = KeyEvent.VK_DEAD_BREVE;
            robot.keyPress(keyCode);
            robot.keyRelease(keyCode);                
*/
            for (int keyCode = KeyEvent.VK_DEAD_GRAVE; keyCode <KeyEvent.VK_DEAD_GRAVE+20; keyCode++) {
                System.out.print("Code "+keyCode+" ");
                robot.keyPress(keyCode);
                robot.keyRelease(keyCode);         
                System.out.println("");                
            }

        } catch (AWTException ex) {
            System.out.println("Exception"+ex);
        }
    }
}

Вывод:

Code 128 ù
Code 129 ,
Code 130 ì
Code 131 3
Code 132 -
Code 133 ù
Code 134 
Code 135 .
Code 136 à
Code 137 2
Code 138 
Code 139 ò
Code 140 0
Code 141 
Code 142 
Code 143 
Code 144 
Code 145 
Code 146 
Code 147 

1 Ответ

0 голосов
/ 27 мая 2019

Значение, которое вы ищете: VK_DEAD_CARON, код 138

Вы можете найти любое значение, связанное с символом, начиная с ASCII таблица: найдите его числовое значение, а затем вы найдете соответствующую переменную в java KeyEvent

Другая возможность заключается в реализации пользовательской клавиатуры

...