これに似た古い質問を読んだことがありますが、どれも私のケースを助けませんでした。
OS: Windows7 x64
言語入力:
アプリケーションの1 つのみ言語をマラヤーラム語 (インド)に切り替え、残りのフィールドについては英語 (米国)に戻したいと考えています。[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));
マラヤーラム語(インド): 南インドのケララ州で使用される地域言語。
およびイベントで Java からAlt + LShiftキー コンボを起動することで、それを達成しようとしました。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]);
(投稿の下部を参照)
これは、時々動作し、時々動作しません。少し不安定な動作が観察されました。コードが実行された後でも、イベントで英語 (米国)に戻らないことがあります。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;
}