2015-01-16 23 views
5

Ho problemi con la stampa di una lettera speciale (turco, ecc.) Tramite la classe di robot java. Ho un metodo per premere i tasti che funzionano come alt + keycode. Non riesco a convertire alcune lettere speciali nel codice corrente. Quindi, come posso risolverlo. ThanxClasse Java Robot premere lettera turca (Ö, ö, Ş, ş, Ü, ü, Ğ, ğ, İ, ı, Ç, ç, Ə, ə)?

Per esempio:

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

Alcuni di questi personaggi sono fuori dal BMP? – fge

+0

Da [questo link] (http://www.fileformat.info/info/unicode/char/015f/index.htm), sembra che sotto Windows dovresti usare Alt + 015F. Non ho Windows quindi non posso testare ... – fge

+0

non funziona. Grazie a – Bertrand

risposta

1

io non sono sicuro perché hai fatto

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

Perché docs java dicono,

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

è necessario passare un modificatore diverso da 0 al sovraccarico.

Si dovrebbe cercare di passare una modifica del genere,

java.awt.event.InputEvent.ALT_DOWN_MASK 

Quindi, probabilmente dovrebbe cercare,

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

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

Se non si può correttamente ottenere un output che quindi dovresti considerare il fatto che il personaggio è UTF-8 Questo potrebbe aiutarti a riguardo, Java, Using Scanner to input characters as UTF-8, can't print text

2

I numeri dei caratteri sono defi niti nello standard Unicode. Sono anche usati in HTML, quindi puoi usare this table.

Ad ogni modo se si vede il carattere nel codice sorgente dipende dal fatto che l'editor interpreti correttamente il file (è preferibile UTF-8).

Secondo l'editor utilizzato deve avere un font installato che contenga questi caratteri. Quindi se digiti alt + 0351 e ottieni e '_' questo potrebbe essere solo un carattere sostitutivo che indica che il carattere manca questo carattere.

E alla fine dovresti dire al compilatore Java che il codice sorgente è UTF-8 - solo per essere sicuro (javac -encoding utf8).

0

So che questa è una risposta in ritardo ma qui è come gestire questo problema per tastiera QWERTY turco

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

    } 
} 

Fondamentalmente quando ho ottenuto keyCode indefinito per Robot che io chiamo la funzione pressUnicode che è:

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

Semplicemente sto solo copiando e incollando il personaggio. Funziona per tutti i caratteri non definiti. :)