使用java更改/切换Windows 7输入语言

时间:2015-04-07 16:37:23

标签: java swing locale windows-7-x64 google-input-tools

读过与此类似的旧问题,这些问题都没有对我的案例有所帮助。

  

操作系统:Windows 7 x64

语言输入:

enter image description here

我想将语言切换为 Malayalam(印度) [Google Input tools],只需jTextFieldJava Swing应用中的malyalamField,然后切换回英语(其他领域的美国)

更新:

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

FocusGained

马拉雅拉姆语(印度): 南印度州使用的一种名为喀拉拉邦的区域语言。

我尝试通过在FocusGainedint 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]); 事件上从java触发 Alt + LShift 键组合来实现这一点

FocusLost

(见帖子底部)

这有时会起作用,有时也没有观察到一点不稳定的行为。即使在代码执行后,有时它也不会在 malyalamField.enableInputMethods(true); malyalamField.getInputContext().selectInputMethod(new Locale("MY", "IN")); 事件上更改回英语(美国)
enter image description here

我也尝试过使用

selectInputMethod()

但这也不起作用且NULL返回selectInputMethod()

我可能正在Locale做错java

截至目前,我所拥有的最好的方法是从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}}

1 个答案:

答案 0 :(得分:3)

这是您需要的语言环境:

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

但是如果启动程序的用户是Administrator / Root !!!你需要知道仅适用