读过与此类似的旧问题,这些问题都没有对我的案例有所帮助。
操作系统:Windows 7 x64
语言输入:
我想将语言切换为 Malayalam(印度) [Google Input tools]
,只需jTextField
个Java 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
马拉雅拉姆语(印度): 南印度州使用的一种名为喀拉拉邦的区域语言。
我尝试通过在FocusGained
和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]);
事件上从java触发 Alt + LShift 键组合来实现这一点
FocusLost
(见帖子底部)
这有时会起作用,有时也没有观察到一点不稳定的行为。即使在代码执行后,有时它也不会在 malyalamField.enableInputMethods(true);
malyalamField.getInputContext().selectInputMethod(new Locale("MY", "IN"));
事件上更改回英语(美国)。
我也尝试过使用
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}}
答案 0 :(得分:3)
这是您需要的语言环境:
Locale loc = new Locale("ml", "IN");
malayalamFileld.setLocale(loc);
malayalamFileld.getInputContext().selectInputMethod(loc);
但是如果启动程序的用户是Administrator / Root !!!你需要知道仅适用