KeyEvent.VK_CONTEXT_MENU 机器人在 Linux 上发送时不起作用
KeyEvent.VK_CONTEXT_MENU doesn't work when sent by Robot on Linux
我正在尝试测试按下 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
键在被机器人按下时也无法正常工作,但在物理按下时工作正常。其他键都可以正常工作。
在 Ubuntu 上用 IceWM 测试,在 Debian 上用 Xfce 和 Java 8 测试。
我不确定为什么在使用 Robot 时密钥不起作用。作为解决方法,我使用 xdotool
通过调用发送密钥:
xdotool key Menu
我正在尝试测试按下 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
键在被机器人按下时也无法正常工作,但在物理按下时工作正常。其他键都可以正常工作。
在 Ubuntu 上用 IceWM 测试,在 Debian 上用 Xfce 和 Java 8 测试。
我不确定为什么在使用 Robot 时密钥不起作用。作为解决方法,我使用 xdotool
通过调用发送密钥:
xdotool key Menu