java - KeyEvent.VK_CONTEXT_MENU 在 Linux 上由 Robot 发送时不起作用

标签 java linux swing awt awtrobot

我正在尝试测试在按下 context menu 键时显示菜单的 Swing 组件。我只需关注组件并通过 awt 机器人发送新闻和发布事件。它适用于 Windows,但不适用于 Linux。下面是显示键事件整数代码的示例 Java 代码。运行时,按键事件设置为 0。但是,当您实际按下按键时,它会正确显示为 525。

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class ContextMenuKeyTest {
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel panel = new JPanel();
                JLabel label = new JLabel("Type something");
                JTextField comp = new JTextField("Hello World!");
                comp.setPreferredSize(new Dimension(300,100));
                panel.add(label);
                panel.add(comp);
                comp.addKeyListener(new KeyListener() {
                    @Override
                    public void keyTyped(KeyEvent e) {}
                    @Override
                    public void keyPressed(KeyEvent e) {
                        label.setText("Pressed: " + e.getKeyCode());
                    }
                    @Override
                    public void keyReleased(KeyEvent e) {}
                });

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
                try {
                    Robot robot = new Robot();
                    robot.keyPress(KeyEvent.VK_C);
                    robot.keyRelease(KeyEvent.VK_C);
                    robot.keyPress(KeyEvent.VK_CONTEXT_MENU);
                    robot.keyRelease(KeyEvent.VK_CONTEXT_MENU);
                } catch (AWTException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

windows 键在机器人按下时也无法正常工作,但在物理按下时工作正常。其他键工作正常。

在带有 IceWM 的 Ubuntu 和带有 Java 8 的 Xfce 的 Debian 上测试。

最佳答案

我不确定为什么在使用 Robot 时 key 不起作用。作为解决方法,我正在使用 xdotool 通过调用发送 key :

xdotool key Menu

关于java - KeyEvent.VK_CONTEXT_MENU 在 Linux 上由 Robot 发送时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33274062/

相关文章:

linux - 创建已编译库的二进制包

java - 即使主线程结束,框架也如何显示

java - 如何在 ActionListener 之外使变量的值成为全局变量

java - 在 JScrollPane 中调用 setViewportView 后避免自动滚动到底部

java - 使用redis缓存java对象: why it should be better than a ConcurrentHashMap?

java - 从 Core Java 中的数组中删除重复元素

linux - 如何让 Apache 在 OSX/XAMPP 环境中遵循符号链接(symbolic link)?

java - 用于 Eclipse 的 Groovy 版本 2.4.2

java - 位移,得到不正确的值

python - USB 驱动器检测 (Linux)