2010-04-07 40 views
3

似乎存在一個模擬退格鍵java.awt.Robot的問題。使用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_ENTERVK_BACK_SPACEVK_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); 
     } 
    } 
} 
+0

謝謝,我懂了。 – Tyler 2010-04-08 04:13:57

1

如預期的退格功能不起作用。我用Backspace添加了一個Shift鍵,它對我來說很好,這裏是它的僞代碼。

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

雖然這似乎不適用於刪除鍵。