?對星期這塊的要求無非是以下幾個點:
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;
????????????}
????????}
????}
posted on 2006-12-29 11:25
交口稱贊 閱讀(1653)
評論(1) 編輯 收藏 所屬分類:
Eclipse RCP SWT