Swing中的本地化加速器(JMenuItem热键)

时间:2012-06-08 15:51:52

标签: java swing internationalization keystroke acceleratorkey

我正在使用德语笔记本电脑上的英语应用程序,通过西班牙语操作系统。

即使我在我的应用程序的开始时明确设置了Locale.setDefault(Locale.ENGLISH),我也看到菜单中的hotkexs为

CTRL + Mayúsculas + C 

而不是

CTRL + SHIFT + C 

我传递给了KeyStroke对象。

这个单词不仅没有像我指定的那样被本地化为英语,而且它还将SHIFT键映射到MAYUS(英文版的CAPS LOCK),所以我想这不仅是一个语言问题,而且键盘映射为好。

那么如何为所有GUI组件强加英语呢?

谢谢!

1 个答案:

答案 0 :(得分:3)

您必须确保在执行任何工具包代码之前设置语言环境。以下代码显示了效果:如果将Locale.setDefault(Locale.GERMAN);移动到任何其他行,它将再次显示默认加速器名称。

您可以将以下参数附加到VM:

,而不是在代码中设置区域设置
-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);
            }
        });
    }
}