Изменение языка IME в приложении Java Swing

Я создаю текстовый редактор на Java (Swing), имеющий EditorPane для ввода текста и меню, содержащее JRadioButtonMenuitems. Like Menu "Language", а JRadiobuttonMenuitems в разделе "Language" - "Испанский", "Японский", "Английский" и т. д. сценарий таков, что когда пользователь щелкает и выбирает любой JRadioButtonMenuItem система должна изменить свой IME в соответствии с выбранным языком. Например, если пользователь щелкнет и выберет японский вариант, редактор должен изменить IME на японский для текущего процесса и разрешить пользователю вводить текст на соответствующем языке.

У меня установлен правильный IME. Вручную могу поменять IME и умею писать в качающемся компоненте. но моя проблема в том, как программно загрузить IME.

В настоящее время я создаю это приложение для WindowsXP, но хочу, чтобы это приложение меняло язык IME для каждой операционной системы.

Я погуглил, но не нашел никакой информации, связанной с изменением IME.

Спасибо


person Nishit Jain    schedule 28.03.2012    source источник
comment
Есть ли способ сделать это? Я обнаружил, что интерфейс InputMehod может использоваться для изменения метода ввода языка, но не знаю, как это сделать.   -  person Nishit Jain    schedule 29.03.2012


Ответы (1)


Язык IME можно изменить для JEditorPane, получив экземпляр InputContext и переопределив метод getInputContext для JEditorPane, например.

final InputContext context = InputContext.getInstance();

jEditorPaneMain = new javax.swing.JEditorPane()
   {
       @Override
        public InputContext getInputContext() {
             return context;
        }
   };

и при выборе любого языка, например, по щелчку японского JRadioButtonMenuItem, добавьте ActionListener

jRadioButtonMenuItemJapanese.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButtonMenuItemJapaneseActionPerformed(evt);
            }
        }); 

выполните следующий внутренний обработчик событий.

private void jRadioButtonMenuItemJapaneseActionPerformed(java.awt.event.ActionEvent evt) {                                                            
      context.selectInputMethod(Locale.JAPANESE);

}

Я пробовал это на Windows XP. Он отлично работает.

person Nishit Jain    schedule 29.03.2012