Java Buchstaben zu keycodes?

1 Antwort

Das solltest du so lösen können:

void enterWord(String word) {
  char[] letters = word.toCharArray();

  for (char letter : letters) {
    robot.keyPress(letter);
  }
}

Um nun noch den Fall abzufedern, dass du große Buchstaben eingeben möchtest, solltest du vor dem Drücken des Buchstabens die Shift-Taste aktivieren:

if (Character.isUpperCase(letter)) {
  robot.keyPress(KeyEvent.VK_SHIFT);
}

und am Ende der Iteration die Taste via keyRelease wieder freisetzen.


Admin50 
Beitragsersteller
 01.12.2019, 12:49

Hey :)

Erstmal danke dir ! Jedoch gibt mir diese Methode nicht die Java Keycodes ( a =65, b = 66, usw.) sondern nur a = 1, b = 1.

Jedoch sollte wenn mein "word" z.b Hallo wäre, sollte die Methode dieses wort auch tippen.

regex9  01.12.2019, 20:23
@Admin50

Ich habe mein obiges Beispiel nochmal geringfügig modifiziert und eine Testanwendung dazu gebaut:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class RobotEnterText {
  private final Robot robot;

  public RobotEnterText() throws AWTException {
    robot = new Robot();
  }

  public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(() -> {
      JFrame frame = new JFrame();
      JTextField field = new JTextField();
      field.setFocusable(true);
      frame.add(field);
      frame.setLocationRelativeTo(null);
      frame.pack();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowOpened( WindowEvent e) {
          field.requestFocus();

          try {
            RobotEnterText app = new RobotEnterText();
            app.enterWord("Hello");
          }
          catch (AWTException ex) {
            ex.printStackTrace();
          }
        }
      });

      frame.setVisible(true);
    });
  }

  public void enterWord(String word) {
    char[] letters = word.toCharArray();

    for (char letter : letters) {
      if (Character.isUpperCase(letter)) {
        robot.keyPress(KeyEvent.VK_SHIFT);
      }

      robot.keyPress(Character.toUpperCase(letter));

      if (Character.isUpperCase(letter)) {
        robot.keyRelease(KeyEvent.VK_SHIFT);
      }

      robot.delay(100);
    }
  }
}

Die Verzögerung ist offensichtlich notwendig, damit doppelt aufeinanderfolgende Buchstaben wie hier das l nicht verschluckt werden.