使用java.awt.Robot模拟退格键
使用java.awt.Robot
模拟退格键似乎存在问题。
这个线程似乎证实了这一点,但它没有提出解决方案。
这有效:
Robot rob = new Robot(); rob.keyPress(KeyEvent.VK_A); rob.keyRelease(KeyEvent.VK_A);
这不是:
Robot rob = new Robot(); rob.keyPress(KeyEvent.VK_BACK_SPACE); rob.keyRelease(KeyEvent.VK_BACK_SPACE);
有任何想法吗?
它似乎在这个测试中起作用。
附录:关于引用的文章,“除了Java语言定义的那些键( VK_ENTER
, VK_BACK_SPACE
和VK_TAB
)之外,不要依赖VK_ constants
的值.Sun保留根据需要更改这些值的权利。将来可以容纳更广泛的键盘。“ – java.awt.event.KeyEvent
public class RobotTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { new RobotTest().create(); } }); } private void create() { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); f.setLayout(new FlowLayout()); f.add(new JTextField(8)); final JButton b = new JButton(); f.getRootPane().setDefaultButton(b); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { b.setText("@" + e.getWhen()); } }); f.add(b); f.setSize(256, 128); f.setVisible(true); doTest(); } private void doTest() { try { Robot r = new Robot(); int[] keys = { KeyEvent.VK_T, KeyEvent.VK_E, KeyEvent.VK_S, KeyEvent.VK_T, KeyEvent.VK_Z, KeyEvent.VK_BACK_SPACE, KeyEvent.VK_ENTER }; for (int code : keys) { r.keyPress(code); r.keyRelease(code); } } catch (AWTException ex) { ex.printStackTrace(System.err); } } }
Backspacefunction无法按预期工作。 我在Backspace中添加了一个Shift键,它对我来说很好用,这里是伪代码。
robot.keyPress(KeyEvent.VK_SHIFT); robot.keyPress(KeyEvent.VK_BACK_SPACE); robot.keyRelease(KeyEvent.VK_BACK_SPACE); robot.keyRelease(KeyEvent.VK_SHIFT);
但这似乎不适用于Delete键。