双字节系统区域设置导致Swing组件调整大小

时间:2012-03-13 17:03:52

标签: java swing unix layout locale

我正在开发一个适用于Solaris的Swing应用程序,并且只有在系统LANG变量设置为双字节语言(例如朝鲜语)时才会出现问题。问题是组件正在调整大小,这会弄乱应用程序的布局:

1)LANG设置为韩语

last label doesn't fit

2)LANG设为英文

all labels fit in the panel

更改Java代码本身的Locale不会影响显示(如果LANG = English和Locale设置为Korean,一切都很好。如果LANG = Korean且Locale设置为English,则会出现问题。)

这是由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 \ uc9c9 \ uc791 \ uc5c5”

1 个答案:

答案 0 :(得分:2)

以下是一些尝试:

  • 确保您在父pack()上致电Window,并且不会干扰任何组件的首选尺寸。

  • 使用compound border,向EmptyBorder添加TitledBorder

  • 在调试时,将填充添加到BorderLayout并使用颜色突出显示。

  • 编辑您的问题以包含展示问题的sscce;本机用户可以更清楚地看到问题(文本截止底部)。