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

标签 java swing internationalization keystroke acceleratorkey

我正在德国笔记本电脑上使用西类牙语操作系统开发英语应用程序。

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

CTRL + Mayúsculas + C 

代替

CTRL + SHIFT + C 

我传递给 KeyStroke 对象。

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

那么我怎样才能为所有的 GUI 组件强加英语呢?

谢谢!

最佳答案

您必须确保在执行任何工具包代码之前设置语言环境。以下代码显示了效果:如果您将 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);
            }
        });
    }
}

关于java - Swing 中的本地化加速器(JMenuItem 热键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952130/

相关文章:

Java:for循环的第一次迭代需要更长的时间

java - JNI 错误 : attempt to pass an instance of java. lang.String 作为参数

java - 同步对象从反向列表中删除 [JList - SWING]

java - 在文件夹中创建 .asm 文件作为 JMenuItems 并将它们添加到 JMenu,添加 ActionListener 事件

java - Swing GridBagLayout - 对齐问题

iphone - 如何在 C++ 中获取 iPhone 上的语言环境?

java - 如何处理正则表达式中的多个括号?

java - 使用 aChart Engine 使条形图的条形可点击

node.js - 如何让 i18next-node 以正确的方式显示变音符号?

javascript - 在 Jquery I18N 插件中指定 'path' 的正确方法是什么?