2010-04-07 39 views
3

Il semble y avoir un problème de simulation de la touche de retour arrière avec java.awt.Robot.simule la touche de retour arrière avec java.awt.Robot

This thread semble confirmer cela, mais il ne propose pas de solution.

Cela fonctionne:

Robot rob = new Robot(); 
rob.keyPress(KeyEvent.VK_A); 
rob.keyRelease(KeyEvent.VK_A); 

Cela ne signifie pas:

Robot rob = new Robot(); 
rob.keyPress(KeyEvent.VK_BACK_SPACE); 
rob.keyRelease(KeyEvent.VK_BACK_SPACE); 

Toutes les idées?

Répondre

5

Il semble fonctionner dans ce test.

Addendum: En ce qui concerne l'article cité, « En dehors de ces clés qui sont définies par le langage Java (VK_ENTER, VK_BACK_SPACE et VK_TAB), ne comptez pas sur les valeurs du VK_ constants Sun se réserve le droit de modifier ces valeurs. au besoin pour accueillir une large gamme de claviers à l'avenir. »- 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

Merci, je l'ai fonctionné. – Tyler

1

la fonctionnalité ne fonctionne pas Backspace comme prévu. J'ai ajouté une touche Shift avec le Backspace et ça marche très bien pour moi, voici le pseudo-code pour ça.

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

Cela ne semble pas fonctionner pour la touche Supprimer.