Локализованные ускорители (горячие клавиши JMenuItem) в Swing

Я работаю в английском приложении на немецком ноутбуке, на испанской ОС.

Даже если я явно установил Locale.setDefault (Locale.ENGLISH) в начале своего приложения, я вижу горячие клавиши в меню как

CTRL + Mayúsculas + C 

вместо

CTRL + SHIFT + C 

что я передал объекту KeyStroke.

Это не только то, что слово не локализуется на английский, как я указал, но и то, что оно отображает клавишу SHIFT на MAYUS (CAPS LOCK на английском языке), поэтому я думаю, что это проблема не только языка, но и раскладки клавиш. ,

Итак, как я могу навязать английский для всех компонентов графического интерфейса?

Спасибо!

Ответы на вопрос(1)

что вы установили локаль перед выполнением любого кода инструментария. Следующий код показывает эффект: если вы переместитеLocale.setDefault(Locale.GERMAN); к любой другой строке он снова покажет имена ускорителей по умолчанию.

Вместо установки локали в вашем коде вы также можете добавить следующий аргумент в виртуальную машину:

-Duser.language=DE

locale menu

public class MenuLocale {

    public static void main(String[] args) {
        Locale.setDefault(Locale.GERMAN);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                JMenuBar menubar = new JMenuBar();
                JMenu menu = new JMenu("Menu");
                JMenuItem menuitem = new JMenuItem("Menuitem");    
                menuitem.setAccelerator(KeyStroke.getKeyStroke('X', KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK));

                f.setJMenuBar(menubar);
                menubar.add(menu);
                menu.add(menuitem);

                f.pack();
                f.setVisible(true);
            }
        });
    }
}
 Whimusical11 июн. 2012 г., 10:47
Я помещаю его в первую строку моего кода после объявления основного метода, и он не работает: & apos; (
 08 июн. 2012 г., 18:24
 28 апр. 2016 г., 18:19
Имейте в виду, что ваш основной метод не является частью JFrame. Это была ловушка, с которой я столкнулся ...

Ваш ответ на вопрос