Search code examples
javaswingkeyboard-layout

Preserving keyboard layout in a JTextfield?


Simple example: 2 JTextFields, one for a spanish word another one for it's translation. Is there a way to preserve keyboard layout per JTextField so that the user wouldn't have to switch back and forth?

TIA.


Solution

  • Yes, this demo code uses the keyboard layout for the selected locales in each text field:

    public class InputMethodTest {
    
      public static void main(String[] args) {
        final InputContext en = InputContext.getInstance();
        en.selectInputMethod(Locale.UK);
        final InputContext es = InputContext.getInstance();
        es.selectInputMethod(new Locale("es", "ES"));
        JTextArea english = new JTextArea() {
          @Override
          public InputContext getInputContext() {
            return en;
          }
        };
        JTextArea spanish = new JTextArea() {
          @Override
          public InputContext getInputContext() {
            return es;
          }
        };
    
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new GridLayout());
        frame.getContentPane().add(new JScrollPane(english));
        frame.getContentPane().add(new JScrollPane(spanish));
        frame.setSize(600, 400);
        frame.setVisible(true);
      }
    }
    

    Tested on Windows XP Home with EN and ES keyboard layouts installed (via Control Panel > Regional and Language Options > Languages > Details...). See the Java Input Method Framework for more details.