Я хочу изменить язык приложения SWT во время выполнения.Как это сделать? - PullRequest
1 голос
/ 19 мая 2011

Я разрабатываю приложение для своего класса по разработке программного обеспечения, и одно из необходимых условий - наличие в нем 2 или более языков.Я уже реализовал это.С другой стороны, требуется, чтобы пользователь мог изменить язык по своему усмотрению, выбрав из выпадающего списка или что-то подобное.

Поскольку я использую AWT и Netbeans, я не могу редактироватьМетод initComponents формы, так как он генерируется автоматически.Я имею в виду вариант ниже, но не знаю, будут ли они вообще работать, поэтому я прошу помощи.

-Измените конструктор моего класса так, чтобы он выглядел так:

public JFmyConstructor() {
    initComponents(); //auto-generated
    myInitMethod();
}

Проблема, которую я собираюсь найти, состоит в том, что мне нужно вызвать конструктор один раз после того, как интерфейс уже запущен (и, таким образом, все объекты созданы. Есть ли обходной путь для этого?

Ответы [ 3 ]

1 голос
/ 26 мая 2011

Вероятно, мой ответ приходит с небольшим опозданием (жаль, что вы неправильно указали название) ...

Очевидно, вам не нужно вызывать какой-либо конструктор для переключения языка во время выполнения. В приложениях Java для настольных ПК это так же просто, как:

Locale brazilian = new Locale("pt", "BR");
Locale.setDefault(brazilian);

Конечно, если вы хотите переключить его через JComboBox, вы, вероятно, сделаете это немного по-другому. Что бы я сделал, я бы на самом деле создал Model (Swing продвигает MVC Design Pattern), которая будет содержать данные (разные локали), и я бы установил локаль по умолчанию в правильном ActionListener. Это не легко, хотя.

Конечно, я бы предпочел использовать нативные имена для Locales. Если они созданы, вы можете легко получить собственное имя Locale name, просто вызвав getDisplayName (), передав себя в качестве параметра:

String brazilianNativeName = brazilian.getDisplayName(brazilian);

Результат может быть неудовлетворительным для некоторых локалей (я считаю, что бразильский португальский, к сожалению, один из них), но вы ничего не можете с этим поделать (если не используете свою собственную строку).

Если честно, только для двух языков я бы вместо этого использовал некоторые ссылки. Вы можете использовать простые JLabels для этого, просто установите правильные свойства шрифта и цвет и назначьте общий ActionListener. Затем вы можете запросить, какой из них был фактически нажат, и создать и настроить Locale соответствующим образом. Для домашней работы этого должно быть достаточно.

0 голосов
/ 19 мая 2011

Лучший способ - использовать внедрение ресурсов для всех компонентов (вместо получения строк i18n из Bundle во время создания панели).

Внедрение ресурсов доступно в ряде библиотек или сред с открытым исходным кодом.

Поскольку вы используете NetBeans, вы сможете создавать приложение на основе Swing Application Framework (SAF), которое уже поддерживает внедрение ресурсов.

В противном случае есть и библиотеки, которые делают именно это; просто Google для "качели" "внедрение ресурсов" , и вы найдете, например, Предохранитель библиотека.

Edit: Вам также следует взглянуть на этот вопрос , который касается точно такой же проблемы и на который есть более подробные ответы (включая мой собственный).

0 голосов
/ 19 мая 2011

SWT и NetBeans - странная комбинация.Если вы можете делать все «обычным» образом с SWT и использовать Eclipse, то есть мощный набор инструментов для управления локализацией, встроенный прямо в систему. См., Например, это введение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...