Двухбайтовый язык системы вызывает изменение размера компонента Swing - PullRequest
1 голос
/ 13 марта 2012

Я работаю над приложением Swing для Solaris, и у меня есть проблема, которая появляется, только когда системная переменная LANG установлена ​​на двухбайтовый язык, такой как корейский. Проблема в том, что размеры компонентов изменяются, и это портит макет приложения:

1) LANG установлен на корейский

last label doesn't fit

2) LANG установлен на английский

all labels fit in the panel

Изменение языкового стандарта в самом коде Java не влияет на отображение (если LANG = Английский и Locale установлен на корейский, все в порядке. Если LANG = Корейский и Locale установлен на английский, проблема возникает).

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

Вот пример кода того, что я делаю:

Box container = Box.createVerticalBox();
container.add(label1);
container.add(label2);
container.add(label3);
container.add(label4);
container.add(label5);

Border border1 = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
TitledBorder titledBorder = BorderFactory.createTitledBorder(border1,           LocalizationTools.getString("STR_1"));

Dimension lDim = new Dimension(550, 100);
mypanel = new JPanel(new BorderLayout());
mypanel.setPreferredSize(lDim);
mypanel.setMaximumSize(lDim);
mypanel.setMinimumSize(lDim);
mypanel.setBorder(titledBorder);
mypanel.add(container);

Вот некоторые строки, используемые в примере:

1) "\ ud648 \ ub514 \ ub809 \ ud1a0 \ ub9ac"

2) "\ ubcc0 \ uacbd \ uc2dc \ uac04"

3) "\ ub9c8 \ uc9c0 \ ub9c9 \ uc791 \ uc5c5"

1 Ответ

2 голосов
/ 13 марта 2012

Вот несколько вещей, которые можно попробовать:

  • Убедитесь, что вы звоните pack() на родительский Window и не мешаете предпочтительному размеру какого-либо компонента.

  • Используйте составную границу , добавив EmptyBorder к вашему TitledBorder.

  • Во время отладки добавьте заполнение к BorderLayout и используйте цвет для выделения.

  • Измените свой вопрос, включив в него sscce , в котором обнаружена проблема;нативный пользователь может увидеть проблему (обрезка текста внизу) более четко.

...