2010-04-07 4 views
3

Кажется, что проблема заключается в моделировании клавиши backspace с помощью java.awt.Robot.имитирует ключ backspace с java.awt.Robot

This thread, похоже, подтверждает это, но не предлагает решения.

Это работает:

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); 

Любые идеи?

ответ

5

Кажется, что работает в этом тесте.

Приложение: Что касается цитируемой статьи «Помимо тех ключей, которые определены на языке Java (VK_ENTER, VK_BACK_SPACE и VK_TAB), не зависит от значений VK_ constants ВС оставляют за собой право изменять эти значения. по мере необходимости для размещения более широкий спектр клавиатур в будущем ". - 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); 
     } 
    } 
} 
+0

Спасибо, я заработал. – Tyler

1

функциональность Backspace не работает, как ожидалось. Я добавил Shift-ключ с Backspace, и он отлично работает для меня, вот для него псевдокод.

robot.keyPress(KeyEvent.VK_SHIFT); 
robot.keyPress(KeyEvent.VK_BACK_SPACE); 
robot.keyRelease(KeyEvent.VK_BACK_SPACE); 
robot.keyRelease(KeyEvent.VK_SHIFT); 

Это, похоже, не работает для клавиши Delete.

Смежные вопросы