2015-01-16 11 views
5

Ich habe Probleme mit einem speziellen Brief (Türkisch usw.) über Java-Roboterklasse. Ich habe eine Methode, um Tasten zu drücken, die als Alt + Keycode funktionieren. Ich kann einige Sonderzeichen nicht in den aktuellen Schlüsselcode umwandeln. Wie kann ich es lösen? ThanxJava Robot Klasse drücken türkischen Brief (Ö, Ö,,,,, Ü, ü, Ğ,,,,, ı, Ç, ç, Ə, ə)?

Beispiel:

KeyStroke ks = KeyStroke.getKeyStroke('ö', 0); 
System.out.println(ks.getKeyCode()); 
Output : 246 
// So alt+0246='ö' 
//but if I convert 'ş' to keycode 
//Output is 351 . So alt+351= '_' and alt+0351= '_' 
//What is the Correct combination for 'ş'. same for 'Ş', 'ş','Ğ', 'ğ', 'İ', 'ı', 'Ə', 'ə' 

KeyPress:

public void altNumpad(int... numpadCodes) { 
    if (numpadCodes.length == 0) { 
     return; 
    } 

    robot.keyPress(VK_ALT); 

    for (int NUMPAD_KEY : numpadCodes) { 
     robot.keyPress(NUMPAD_KEY); 
     robot.keyRelease(NUMPAD_KEY); 
    } 

    robot.keyRelease(VK_ALT); 
} 
+0

Sind einige dieser Zeichen außerhalb des BMP? – fge

+0

Von [diesem Link] (http://www.fileformat.info/info/unicode/char/015f/index.htm) scheint es, dass Sie unter Windows Alt + 015F verwenden sollten. Ich habe kein Windows, also kann ich nicht testen ... – fge

+0

funktioniert nicht. Danke – Bertrand

Antwort

1

Ich bin nicht sicher, warum Sie

tat
KeyStroke ks = KeyStroke.getKeyStroke('ö', 0); 

Da Java-docs sagen,

public static KeyStroke getKeyStroke(Character keyChar, 
       int modifiers) 
//Use 0 to specify no modifiers. 

Sie müssen einen anderen Modifizierer als 0 an die Überlast übergeben.

Sie sollten versuchen, eine Änderung wie, passieren

java.awt.event.InputEvent.ALT_DOWN_MASK 

So sollte wahrscheinlich versuchen,

KeyStroke ks = KeyStroke.getKeyStroke('ö', java.awt.event.InputEvent.ALT_DOWN_MASK); 

Java doc als Referenz: http://docs.oracle.com/javase/7/docs/api/javax/swing/KeyStroke.html#getKeyStroke(char)

Wenn Sie nicht richtig eine Ausgabe erhalten kann von Dann sollten Sie bedenken, dass das Zeichen UTF-8 ist. Dies könnte Ihnen in dieser Hinsicht helfen, Java, Using Scanner to input characters as UTF-8, can't print text

2

Die Zeichennummern sind im Unicode-Standard definiert. Sie werden auch in HTML verwendet, daher können Sie this table verwenden.

Wie auch immer, wenn Sie das Zeichen im Quellcode sehen hängt davon ab, dass der Editor die Datei korrekt interpretiert (UTF-8 wird bevorzugt).

Zweitens muss der verwendete Editor eine Schriftart installiert haben, die diese Zeichen enthält. Wenn Sie also alt + 0351 und get und '_' eingeben, kann dies nur ein Ersatzzeichen sein, das anzeigt, dass die Schriftart dieses Zeichen verfehlt.

Und am Ende sollten Sie den Java-Compiler sagen, dass der Quellcode UTF-8 ist - nur um sicherzustellen, (javac -encoding utf8).

0

Ich weiß, dass dies eine späte Antwort ist aber hier ist es, wie ich dieses Problem für türkische QWERTZ-Tastatur Griff

static void writeRobotWrite(Robot robot, String keys) throws InterruptedException { 
    .... 
     try { 
      robot.keyPress(keyCode); 
      robot.delay(20); 
      robot.keyRelease(keyCode); 
      robot.delay(20); 
     }catch (IllegalArgumentException e) 
     { 
      pressUnicode(c, robot); 
     } 

    } 
} 

Grundsätzlich, wenn ich nicht definiert keyCode für Roboter bekam nenne ich pressUnicode Funktion, die ist:

static void pressUnicode(char c, Robot robot) 
{ 
    String cantRecognize = ""+c; 
    StringSelection selection = new StringSelection(cantRecognize); 
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    clipboard.setContents(selection, null); 
    robot.keyPress(KeyEvent.VK_CONTROL); 
    robot.keyPress(KeyEvent.VK_V); 
    robot.keyRelease(KeyEvent.VK_V); 
    robot.keyRelease(KeyEvent.VK_CONTROL); 
} 

Ich bin einfach nur Kopieren und Einfügen des Charakters. Dies funktioniert für alle nicht definierten Zeichen. :)