【问题标题】:Generate AWT keyevent for special characters为特殊字符生成 AWT keyevent
【发布时间】:2014-05-04 17:25:57
【问题描述】:

我想为 £, €, µ, ½, Ö, Ä 等特殊字符生成键事件。我可以使用以下代码为键盘上的键生成键事件,例如 'A、B、c、%、*、^' 等:

public static void generateKeyEvent(final int c) {

        new Thread() {
            public void run() {

                try {
                    Robot robot = new Robot();
                    robot.keyPress(c);

                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                    }
                    robot.keyRelease(c);
                } catch (Exception e) {
                e.printStackTrace();
                }
            }
        }.start();

    }

如果是普通字符,它可以正常工作,但如果是我上面提到的字符,代码会抛出以下异常:

java.lang.IllegalArgumentException: Invalid key code
at sun.awt.windows.WRobotPeer.keyPress(Native Method)
at java.awt.Robot.keyPress(Unknown Source)
at com.companyname.utils.Abc$1.run(Abc.java:286)

我在寻找此问题的解决方案时注意到的一件事,因为这些特殊字符未映射到我的键盘上,这就是它抛出此异常的原因。

任何想法,我该怎么做?

【问题讨论】:

  • 应该如何按下不存在的键?

标签: java awt awtrobot


【解决方案1】:

我得到了这个问题的答案.. 基本上如果你想打印那些符号,那么你需要“alt”键来输入。

例如:如果您需要在记事本中输入“é”,则必须输入 alt+130。

所以我也这样做了,我为 alt 生成了键事件,然后为 numpad 1 然后为 numpad3,最后为 numpad0。

【讨论】:

  • 这在 Android 中尝试时似乎不起作用。那里有不同的方法吗?
【解决方案2】:

你是如何传递钥匙的? 请注意,Robot.keyPress 需要键码,而不是字符。看看KeyEvent constants。有一个VK_EURO_SIGN,其他的不清楚。 您应该能够通过实现 KeyListener 并在按下特定键(键组合)时检查 KeyEvent.getKeyCode() 来获取任意键代码。

【讨论】:

  • 我创建了一个视图,其中包含这些特殊字符的按钮,当用户按下它时,我需要生成按键事件。
  • 你能提供一些示例代码吗?当你说 View - 这是一个 Android 应用程序吗?
  • 为什么我会在 android 中生成 AWT 事件?它是一个本地 Java 应用程序。查看代码:它是一个简单的 jframe,有一个 jbutton。
  • 好吧,在这种情况下,您只需使用robot.keyPress(KeyEvent.VK_EURO_SIGN)。对于您没有常量的符号,您可以implement a KeyListener 并通过从键盘输入符号来获取 keyCode。
  • 这实际上不起作用,因为你的键盘上没有那个键,它会抛出 IllegalArgumentException,正如我在我的问题中提到的那样。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多