您的位置:首页 > 其它

打造完美SWT日期选择控件:(六)星期

2006-11-28 10:52 459 查看
对星期这块的要求无非是以下几个点:
1:支持多语言。
2:支持动态布局。
3:支持任意星期开始。这个解释一下,比如有的国家一个星期的开始是星期一有的是星期日,也有可能是星期X。
老规矩上图,看图说话:


中文环境,星期日为星期开始。


中文环境,星期二为星期开始。


英文环境,星期日为星期开始。


日文环境,星期日为星期开始。



自动适应布局的效果。总体思想是用GridLayout布局。一行七列。为了看得清楚,特意加了BORDER效果。

以下是关键代码:

private void initDayTitle() {

dayTitles = new Label[7];
for (int i = 0; i < dayTitles.length; i++) {
final Label label = new Label(dayTitle, SWT.CENTER);
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
dayTitles[i] = label;
}

DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
String[] dayNames = dateFormatSymbols.getShortWeekdays();
int minLength = Integer.MAX_VALUE;
for (int i = 0; i < dayNames.length; i++) {
int len = dayNames[i].length();
if (len > 0 && len < minLength) {
minLength = len;
}
}
if (minLength > 2) {
for (int i = 0; i < dayNames.length; i++) {
if (dayNames[i].length() > 0) {
if (locale.equals(Locale.CHINA)) {
if (dayNames[i].length() > 2) {
dayNames[i] = dayNames[i].substring(2, 3);
}
} else {
if (dayNames[i].length() > 0) {
dayNames[i] = dayNames[i].substring(0, 3);
}
}
}
}
}
firstDayOfWeek = basicCalendar.getFirstDayOfWeek();
int d = firstDayOfWeek;
for (int i = 0; i < dayTitles.length; i++) {
Label labelt = dayTitles[i];
labelt.setText(dayNames[d]);
labelt.setBackground(getBackground());

if (d == Calendar.SUNDAY) {
labelt.setForeground(getDisplay().getSystemColor(SWT.COLOR_RED));
} else if (d == Calendar.SATURDAY) {
labelt.setForeground(getDisplay().getSystemColor(SWT.COLOR_GREEN));
} else {
labelt.setForeground(getForeground());
}

d++;
if (d > dayTitles.length) {
d -= dayTitles.length;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: