【问题标题】:Localized accelerators (JMenuItem hotkeys) in SwingSwing 中的本地化加速器(JMenuItem 热键)
【发布时间】:2012-06-08 15:51:52
【问题描述】:

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

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

CTRL + Mayúsculas + C 

而不是

CTRL + SHIFT + C 

我传递给 KeyStroke 对象。

不仅这个词没有像我指定的那样本地化为英语,而且它还将 SHIFT 键映射到 MAYUS(英语中的大写锁定),所以我想这不仅是语言问题,而且键映射为嗯。

那么我怎样才能对所有的 GUI 组件强制使用英语呢?

谢谢!

【问题讨论】:

    标签: java swing internationalization keystroke acceleratorkey


    【解决方案1】:

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

    除了在代码中设置语言环境,您还可以将以下参数附加到 VM:

    -Duser.language=DE
    

    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);
                }
            });
        }
    }
    

    【讨论】:

    • 我把它放在我的代码的第一行主方法声明后,它不起作用:'(
    • 请注意,您的主要方法不是 JFrame 的一部分。那是我遇到的陷阱……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多