Przeczytałem stare pytania podobne do tych, które nie pomogły w mojej sprawie.Zmiana/zmiana języka Windows 7 przy użyciu java
OS: Windows 7 x64
Wejścia Język:
Chcę zmienić język na malajalam (Indie)[Google Input tools]
tylko dla jednego jTextField
w Java Swing
Aplikację i przełącz z powrotem na Angielski (Stany Zjednoczone) dla pozostałych pól.
UPDATE:
Pole malyalamField
jest javax.swing.JTextField
javax.swing.JTextField malyalamField= new javax.swing.JTextField();
malyalamField.setFont(new java.awt.Font("Arial Unicode MS", 0, 12));
malajalam (Indie):Język regionalny stosowany w Południowym indyjskim stanie Kerala nazwie.
starałem się osiągnąć przez wypalanie Alt + LShift Kombinacja klawiszy z java na FocusGained
i FocusGained
wydarzeń
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]);
(Zobacz dno postu)
Działa to czasami, a czasami nie zaobserwowano drobnych błędnych zachowań. Czasami nie zmienia się z powrotem na Angielski (Stany Zjednoczone) na FocusLost
zdarzeń nawet po wykonaniu kodu.
Próbowałem też za pomocą
malyalamField.enableInputMethods(true);
malyalamField.getInputContext().selectInputMethod(new Locale("MY", "IN"));
Ale to też nie działa i selectInputMethod()
powrócił NULL
I może być robić selectInputMethod()
z niewłaściwym Locale
dzień teraz najlepsze, co mam, to odpalenie klawiszy od java
. Czy istnieje sposób, w jaki można to osiągnąć?
przykładowy kod:
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;
}
Jakiego rodzaju jest 'malyalamField', proszę napisać przykład, z którego możemy łatwo odtworzyć. –
@ Jean-FrançoisSavard dodał żądane szczegóły dotyczące malayalamField –
@AndrewThompson, Dodano link przykładowego kodu. –