#java #swing #locale
#java #swing #locale
Вопрос:
Я использую jdk 1.6 и хотел бы интернационализировать ускоритель моего пункта меню. язык по умолчанию — французский, и я хочу перевести на английский. Я использую приведенный ниже код :
JMenuItem deleteMenuItem = new JMenuItem("delete");
deleteMenuItem.setLocale(Locale.ENGLISH);
deleteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));
но мой ускоритель всегда на французском.
Как я могу это решить?
Заранее спасибо.
Ответ №1:
Вы должны установить locale по умолчанию для вашего приложения. Тогда это будет работать.
Locale.setDefault(Locale.ENGLISH);
Комментарии:
1. Попробуйте выполнить
setDefaultLocale()
вызов до построения фрейма. В лучшем случае прямо в вашемmain()
методе
Ответ №2:
Для интернационализации ускорителя на английский вам нужно вызвать Locale.setDefault(Locale.ENGLISH)
перед созданием экземпляра нового JFrame. Ниже приведен пример, в котором я меняю французский язык в ускорителе.Язык моей машины — английский.
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);
}
Результат таков
Комментарии:
1. спасибо @Sai Ye Yan Naing, да, я написал «удалить», потому что я хотел быть явным, это просто для вопроса, в моем реальном коде я использую ResourceBundle. Проблема, с которой я сталкиваюсь, заключается в переводе ускорителя моего пункта меню.