2015-04-07 11 views
14

Ho letto vecchie domande simili a questa nessuno di loro ha aiutato il mio caso.Cambiare/cambiare la lingua di input di Windows 7 usando java

OS: Windows 7 x64

Ingressi Lingua:

enter image description here

voglio cambiare la lingua per Malayalam (India)[Google Input tools] per un solo jTextField in Java Swing applicazione e tornare a inglese (Stati Uniti) per il resto dei campi.

UPDATE:

Il campo malyalamField è un javax.swing.JTextField

 javax.swing.JTextField malyalamField= new javax.swing.JTextField(); 
     malyalamField.setFont(new java.awt.Font("Arial Unicode MS", 0, 12)); 

malayalam (India):Una lingua regionale usata nello stato indiano del sud chiamato Kerala.

ho cercato di raggiungere questo sparando il Alt + MAIUSC di sinistra combinazione di tasti da Java sui FocusGained e FocusGained eventi

int keyInput[] = { KeyEvent.VK_ALT, KeyEvent.VK_SHIFT}; 
Robot shiftkey=null; 
Robot altkey=null; 
try { 
    shiftkey = new Robot(); 
    altkey=new Robot(); 
} catch (AWTException e) { 
    e.printStackTrace(); 
} 

altkey.keyPress(keyInput[0]); 
shiftkey.keyPress(keyInput[1]); 

altkey.keyRelease(keyInput[0]); 
shiftkey.keyRelease(keyInput[1]); 

(Vedi fondo post)

Questo a volte funziona ea volte non è stato osservato un comportamento erratico. A volte non torna a inglese (Stati Uniti) sugli eventi FocusLost anche dopo l'esecuzione del codice.
enter image description here

Ho anche provato ad utilizzare

  malyalamField.enableInputMethods(true); 
     malyalamField.getInputContext().selectInputMethod(new Locale("MY", "IN")); 

Ma anche questo non ha funzionato e selectInputMethod() restituito NULL

Potrei fare il selectInputMethod() con un torto Locale

partire dal ora il meglio che ho è quello di sparare i tasti da java. Esiste un modo per raggiungere questo obiettivo?

codice di esempio:

import java.awt.AWTException; 
import java.awt.Robot; 
import java.awt.event.KeyEvent; 

public class LanguageChangeForm extends javax.swing.JFrame { 
    public LanguageChangeForm() { 
     initComponents(); 
    } 
    @SuppressWarnings("unchecked") 
    private void initComponents() { 

     englishField1 = new javax.swing.JTextField(); 
     malayalamFileld = new javax.swing.JTextField(); 
     jLabel1 = new javax.swing.JLabel(); 
     jLabel2 = new javax.swing.JLabel(); 
     jLabel3 = new javax.swing.JLabel(); 
     englishField2 = new javax.swing.JTextField(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     malayalamFileld.setFont(new java.awt.Font("Arial Unicode MS", 0, 11)); 
     malayalamFileld.addFocusListener(new java.awt.event.FocusAdapter() { 
      public void focusGained(java.awt.event.FocusEvent evt) { 
       malayalamFileldFocusGained(evt); 
      } 
      public void focusLost(java.awt.event.FocusEvent evt) { 
       malayalamFileldFocusLost(evt); 
      } 
     }); 

     jLabel1.setText("English Field"); 
     jLabel2.setText("Malayalam Field"); 
     jLabel3.setText("English Field"); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(47, 47, 47) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
          .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
          .addComponent(englishField2, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
        .addGroup(layout.createSequentialGroup() 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
          .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 131, Short.MAX_VALUE) 
          .addComponent(englishField1)) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 49, Short.MAX_VALUE) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(malayalamFileld, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGap(34, 34, 34)))) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(49, 49, 49) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jLabel1) 
        .addComponent(jLabel2)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(englishField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(malayalamFileld, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGap(18, 18, 18) 
       .addComponent(jLabel3) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addComponent(englishField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(152, Short.MAX_VALUE)) 
     ); 

     pack(); 
    } 

    private void malayalamFileldFocusGained(java.awt.event.FocusEvent evt) { 
     try{ 
     int keyInput[] = { KeyEvent.VK_ALT, KeyEvent.VK_SHIFT,,KeyEvent.VK_2}; 
     Robot robitkey=null; 

     try { 
      robitkey= new Robot(); 

     } catch (AWTException e) { 

      e.printStackTrace(); 
     } 
      robitkey.keyPress(keyInput[0]); 
      robitkey.keyPress(keyInput[1]); 
      robitkey.keyPress(keyInput[2]); 
      robitkey.keyRelease(keyInput[0]); 
      robitkey.keyRelease(keyInput[1]); 
      robitkey.keyRelease(keyInput[2]); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    private void malayalamFileldFocusLost(java.awt.event.FocusEvent evt) { 


     try{ 
     int keyInput[] = { KeyEvent.VK_ALT, KeyEvent.VK_SHIFT,,KeyEvent.VK_1}; 
     Robot robitkey=null; 

     try { 
      robitkey= new Robot(); 

     } catch (AWTException e) { 

      e.printStackTrace(); 
     } 
      robitkey.keyPress(keyInput[0]); 
      robitkey.keyPress(keyInput[1]); 
      robitkey.keyPress(keyInput[2]); 
      robitkey.keyRelease(keyInput[0]); 
      robitkey.keyRelease(keyInput[1]); 
      robitkey.keyRelease(keyInput[2]); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

    } 
    public static void main(String args[]) { 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(LanguageChangeForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(LanguageChangeForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(LanguageChangeForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(LanguageChangeForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 

     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new LanguageChangeForm().setVisible(true); 
      } 
     }); 
    } 
    private javax.swing.JTextField englishField1; 
    private javax.swing.JTextField englishField2; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JLabel jLabel3; 
    private javax.swing.JTextField malayalamFileld; 

} 
+1

Che tipo è "malyalamField", per favore pubblica un esempio da cui possiamo riprodurlo facilmente. –

+0

@ Jean-FrançoisSavard hanno aggiunto i dettagli richiesti su malayalamField –

+0

@AndrewThompson, hanno aggiunto un collegamento di un codice di esempio. –

risposta

3

Questo è locale è necessario:

Locale loc = new Locale("ml", "IN"); 
malayalamFileld.setLocale(loc); 
malayalamFileld.getInputContext().selectInputMethod(loc); 

Ma è necessario sapere che questo funziona solo se l'utente che ha avviato il programma è Administrator/Root !!!

+0

in altre parole, una funzione inutile: S infastidire gli utenti con un display uac non è particolarmente user-friendly. – Tschallacka

+0

Sembra la soluzione più probabile, testeremo presto. UAC non è un problema. On può sempre disabilitare. I collegamenti forniti da –

+0

non funzionano ora. – ThilinaMD

Problemi correlati