对星期这块的要求无非是以下几个点:
1:支持多语言。
2:支持动态布局。
3:支持任意星期开始。这个解释一下,比如有的国家一个星期的开始是星期一有的是星期日,也有可能是星期X。
老规矩上图,看图说话:
中文环境,星期日为星期开始。
中文环境,星期二为星期开始。
英文环境,星期日为星期开始。
日文环境,星期日为星期开始。
自动适应布局的效果。总体思想是用GridLayout布局。一行七列。为了看得清楚,特意加了BORDER效果。
以下是关键代码:
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;
}
}
}
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;
}
}
}