如何国际化JMenuitem的加速器?

时间:2016-10-24 09:01:55

标签: java swing locale

我使用jdk 1.6,我希望国际化菜单项的加速器。 默认语言是法语,我想用英语翻译。我使用下面的代码:

JMenuItem deleteMenuItem = new JMenuItem("delete");
deleteMenuItem.setLocale(Locale.ENGLISH);
deleteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));

但我的加速器总是用法语。 我该如何解决这个问题? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您必须为应用程序设置默认区域设置。然后它会工作。

Locale.setDefault(Locale.ENGLISH);

答案 1 :(得分:0)

对于国际化加速器到英语,您需要在实例化新JFrame之前调用Locale.setDefault(Locale.ENGLISH)。下面的示例我在加速器中更改了法语。我的机器语言环境是英语。

  public static void main(String[] args) {
    Locale.setDefault(Locale.FRANCE);

    JFrame frame = new JFrame("MenuSample Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menuBar = new JMenuBar();

    JMenu fileMenu = new JMenu("File");
    fileMenu.setMnemonic(KeyEvent.VK_F);
    menuBar.add(fileMenu);

    JMenuItem newMenuItem = new JMenuItem("New", KeyEvent.VK_N);
    fileMenu.add(newMenuItem);


    JMenuItem cutMenuItem = new JMenuItem("Cut", KeyEvent.VK_T);

    KeyStroke ctrlXKeyStroke = KeyStroke
            .getKeyStroke(KeyEvent.VK_CUT, 0);

    cutMenuItem.setAccelerator(ctrlXKeyStroke);

    fileMenu.add(cutMenuItem);

    frame.setJMenuBar(menuBar);
    frame.setSize(350, 250);
    frame.setVisible(true);
}

输出

enter image description here