Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Изменение меню в результате каких-либо событий.
Список форумов
 ->  Локализация (l10n & i18n)


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
goga : 2
Новичок
Откуда: Минск

СообщениеМар 19, 2008 0:46 
Ответить с цитатой
Доброго времени суток.
Мой вопрос состоит в следующем. Есть приложение с графическим интерфейсом, в частности есть меню. Как при выборе одного из пунктов меню поменять язык меню?
Этот вопрос размещаю в данной ветке форума, а не в Локализации, потому как меня также интересует способ перерисовки меню, в результате каких-либо действий. Если я не прав, то извините.
Вот код, который я использую:
Код:

import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class RuEn extends JFrame {

   private JRadioButtonMenuItem langs[];
   private ButtonGroup langGroup;
   public String language;
   public String country;
   public Locale currentLocale;
   public ResourceBundle messages;

   // GUI create
   public RuEn() {
      super("Inter");

      // задаю парметры локали
      // по умолчанию русский язык
      language = new String("ru");
      country = new String("RU");
      setLocalisation(language, country);

      // создаю меню с выбором языка
      JMenu languageMenu = new    JMenu(messages.getString("languageMenuIncription"));

      // здесь с помощью messages.getString("")
      // вызываю значения строк из файлов
      String langNames[] = {messages.getString("Russian"),
                            messages.getString("English") };
      langs = new JRadioButtonMenuItem[ langNames.length];
      langGroup = new ButtonGroup();
     
      // обработчик события переключения RadioButton
      //реализован ниже
      ItemHandler itemHandler = new ItemHandler();

      for (int count = 0; count < langs.length; count++ ) {
         langs[count] = new JRadioButtonMenuItem( langNames[count]);
         languageMenu.add(langs[count]);
         langGroup.add(langs[count]);
         langs[count].addActionListener( itemHandler );
      }
      // Выбор первого элемента
      langs[0].setSelected(true);
      JMenuBar bar = new JMenuBar();
      setJMenuBar(bar);
      bar.add( languageMenu );

      setSize(500,200);
      setVisible(true);
   }
   // этот метод я пытаюсь использовать для изменения локали
   public void setLocalisation(String language, String country) {
      currentLocale = new Locale(language, country);
      messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
   }

   private class ItemHandler implements ActionListener {
      public void actionPerformed(ActionEvent event){
         for ( int count = 0; count < langs.length; count++)
            if ( (event.getSource() == "Russian") ||
                  (event.getSource() == "Русский") ){
               // использование этого метода ничего не дает
               setLocalisation("ru","RU"); 
            } else {
               setLocalisation("en","US");
            }
            repaint(); // в данном случае не помогает
        }
    }

   public static void main(String[] args) {
      RuEn application = new RuEn();
      application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   } // end of main
}

Результатом является вывод меню по умолчанию на русском языке, изменение радио кнопок ни к чему не приводит. В чем ошибка?
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Майоров Павел : 1460
Java Developer

СообщениеМар 21, 2008 18:38 
Ответить с цитатой
В методе setLocalization вы меняете поля currentLocale и messages, но где вы их после этого используете?

Нужно пройтись по всем пунктам меню и сменить названия на свежезагруженные. Это можно сделать
а) рекурсивно
б) через специальное событие
в) пересоздав интерфейс

Последний пункт - проще и кривее всего.
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Локализация (l10n & i18n)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru