随笔 - 35  文章 - 21  trackbacks - 0
<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿

随笔分类

随笔档案

文章分类

搜索

  •  

最新评论

阅读排行榜

评论排行榜


效果图:



前提准备:
1,使用到一个上一次发布的组件:ImageLabelField。这个组件是一个图标按钮。
可以接收用户的点击动作。
2,一个关于时间格式的类 DateFormatOutil。

行为:
点击左右的图标按钮,可以更换日期的显示。
并提供了获得当前日期的函数:public Date getCurrentDate()

代码:
DateFormatOutil
package app.ui.outil;

import java.util.Calendar;
import java.util.Date;
/**
 * 
 
*/
public class DateFormatOutil {
 
    
public final static long MILLISECONDS_IN_A_DAY = 86400000;
    
public final static long MILLISECONDS_IN_AN_HOUR = 3600000;
    
public final static long MILLISECONDS_IN_A_MINUTE = 60000;
    
    
private static Calendar calendar = Calendar.getInstance();
    
    
public static String formatDateAsFr_dMhm( java.util.Date date)
    {
       
//format : dd/MM hh:mm
       calendar.setTime( date );
       
       
int day = calendar.get(Calendar.DAY_OF_MONTH);
       
int month = calendar.get(Calendar.MONTH) + 1;
       
int hour = calendar.get(Calendar.HOUR_OF_DAY);
       
int minute = calendar.get(Calendar.MINUTE);
      
       
return formatXX(day)+ "/" +formatXX(month)
              
+ " " +formatXX(hour)+ ":" +formatXX(minute);
    }
    
    
public static String formatDateAsFr_dMy( java.util.Date date)
    {
       
//format : dd/MM/yyyy
       calendar.setTime( date );
       
       
int day = calendar.get(Calendar.DAY_OF_MONTH);
       
int month = calendar.get(Calendar.MONTH) + 1;
       
int year = calendar.get(Calendar.YEAR);
       
return formatXX(day)+ "/" +formatXX(month)+"/"+year;
    }
    
    
public static String formatDateAsFr_dMyhm( Date date )
    {
       
//format : dd/MM/yyyy hh:mm
       calendar.setTime( date );
       
       
int day = calendar.get(Calendar.DAY_OF_MONTH);
       
int month = calendar.get(Calendar.MONTH) + 1;
       
int year = calendar.get(Calendar.YEAR);
       
int hour = calendar.get(Calendar.HOUR_OF_DAY);
       
int minute = calendar.get(Calendar.MINUTE);
       
       
return formatXX(day)+ "/" +formatXX(month) + "/" +year
              
+ " " +formatXX(hour)+ ":" +formatXX(minute);
              
    }
    
    
public static Date addDays( Date date, int num )
    {
        
long mseconds = date.getTime();
        
return new Date( mseconds + MILLISECONDS_IN_A_DAY*num );
    }
        
    
public static Date getBeginOfDay( Date date )
    {
       
long mseconde = date.getTime();
       
long plusmseconde = mseconde % MILLISECONDS_IN_A_DAY;
       Date beginningDate 
= new Date( mseconde - plusmseconde - MILLISECONDS_IN_AN_HOUR );
       
return beginningDate;
    }
    
    
public static Date getEndOfDay( Date date )
    {
       
long mseconds = date.getTime();
       
long plusmseconds = mseconds % MILLISECONDS_IN_A_DAY;
       
long restmseconds = MILLISECONDS_IN_A_DAY - plusmseconds ;
       Date endDate 
= new Date( mseconds + restmseconds - MILLISECONDS_IN_AN_HOUR -1);
       
return endDate;
    }
    
    
private static String formatXX( int value )
    {
        
return value < 10 ? "0"+value : ""+value;
    }
    
    
}


OneDayField :
package app.ui.component;

import app.ui.outil.DateFormatOutil;

import java.util.Date;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Keypad;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.system.Bitmap;

/**
 * 
 
*/
public class OneDayField extends HorizontalFieldManager
{    
    
private Date currentDate;
    
private LabelField dateChamp;
    
private ImageLabelField previousButton;
    
private ImageLabelField nextButton;
    
    
public OneDayField( Date date, long style) 
    {   
        
super( style );
        currentDate 
= date;
        
        String dateStr 
= DateFormatOutil.formatDateAsFr_dMy( currentDate );
        dateChamp 
= new LabelField( dateStr, Field.NON_FOCUSABLE );
        
        Bitmap previousImage 
= Bitmap.getBitmapResource( "arrow_date_previous.gif" );
        previousButton 
= new ImageLabelField( previousImage );
        
        Bitmap nextImage 
= Bitmap.getBitmapResource( "arrow_date_next.gif" );
        nextButton 
= new ImageLabelField( nextImage );
        
        add( previousButton );
        add( dateChamp );
        add( nextButton );
    }


    
public int getPreferredWidth()
    {
        
int width = 0;
        
for (int i = 0;  i < getFieldCount();  i++) {
            width 
+= getField(i).getPreferredWidth();
        }
        
return width;
    }
    
    
public int getPreferredHeight()
    {
        
int height = 0;
        
for (int i = 0;  i < getFieldCount();  i++) {
            
int currentHeight = getField(i).getPreferredHeight();
            height 
= height > currentHeight ? height : currentHeight;
        }
        
return height;
    }
    
    
public Date getCurrentDate()
    {
        
return currentDate;
    }
    
    
public void setCurrentDate( Date newDate )
    {
        currentDate 
= newDate;
        dateChamp.setText( DateFormatOutil.formatDateAsFr_dMy( currentDate ) );
    }
    
    
    
protected boolean keyDown(int keycode, int time)
    {
        
if( Keypad.key( keycode ) == Keypad.KEY_ENTER)
        { 
           Field field 
= getFieldWithFocus();
           
if( field == previousButton )
           {
               setCurrentDate( DateFormatOutil.addDays( currentDate, 
-1 ) );
           }     
           
else if( field == nextButton )
           {
               setCurrentDate( DateFormatOutil.addDays( currentDate, 
1 ) );
           }  
      
        }  
        
else
        {
          fieldChangeNotify(
1);
          
return false;
        }
        fieldChangeNotify(
1);
        
return true;
    }
     
    
protected void fieldChangeNotify(int context) 
    {
        
try {
            
this.getChangeListener().fieldChanged(this, context);
        } 
catch (Exception exception) {
        }
    }

}


SevenDayField :
package app.ui.component;

import app.ui.outil.DateFormatOutil;

import java.util.Date;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Keypad;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.system.Bitmap;

/**
 * 
 
*/
public class SevenDayField extends HorizontalFieldManager
{
    
private Date beginDate;
    
private Date middleDate;
    
private Date endDate;
    
private LabelField beginDateChamp;
    
private LabelField endDateChamp;
    
private ImageLabelField previousButton;
    
private ImageLabelField nextButton;
    
    
public SevenDayField( Date date, long style) 
    {
        
        
super( style );
        
        middleDate 
= date;
        
        beginDate 
= DateFormatOutil.addDays( middleDate, -3 );
        String beginDateStr 
= DateFormatOutil.formatDateAsFr_dMy( beginDate );
        beginDateChamp 
= new LabelField( beginDateStr, Field.NON_FOCUSABLE );
        
        endDate 
= DateFormatOutil.addDays( middleDate, 3 );
        String endDateStr 
= DateFormatOutil.formatDateAsFr_dMy( endDate );
        endDateChamp 
= new LabelField( endDateStr, Field.NON_FOCUSABLE );
        
        Bitmap previousImage 
= Bitmap.getBitmapResource( "arrow_date_previous.gif" );
        previousButton 
= new ImageLabelField( previousImage );
        
        Bitmap nextImage 
= Bitmap.getBitmapResource( "arrow_date_next.gif" );
        nextButton 
= new ImageLabelField( nextImage );
        
        add( previousButton );
        add( beginDateChamp );
        add( 
new LabelField( "-" ) );
        add( endDateChamp );
        add( nextButton );  
              
    }
    
    
public int getPreferredWidth()
    {
        
int width = 0;
        
for (int i = 0;  i < getFieldCount();  i++) {
            width 
+= getField(i).getPreferredWidth();
        }
        
return width;
    }
    
    
public int getPreferredHeight()
    {
        
int height = 0;
        
for (int i = 0;  i < getFieldCount();  i++) {
            
int currentHeight = getField(i).getPreferredHeight();
            height 
= height > currentHeight ? height : currentHeight;
        }
        
return height;
    }    
    
    
public Date getBeginDate()
    {
        
return beginDate;
    }
    
    
public Date getMiddleDate()
    {
        
return middleDate;
    }
    
    
public Date getEndDate()
    {
        
return endDate;
    }
    
    
public void setCurrentDate( Date newMiddleDate )
    {
        middleDate 
= newMiddleDate;
        beginDate 
= DateFormatOutil.addDays( middleDate, -3 );
        endDate 
= DateFormatOutil.addDays( middleDate, 3);
        beginDateChamp.setText( DateFormatOutil.formatDateAsFr_dMy( beginDate ) ); 
        endDateChamp.setText( DateFormatOutil.formatDateAsFr_dMy( endDate ) );
    }

            
    
protected boolean keyDown(int keycode, int time)
    {
        
if( Keypad.key( keycode ) == Keypad.KEY_ENTER)
        { 
           Field field 
= getFieldWithFocus();
           
           
if( field == previousButton )
           {
               setCurrentDate( DateFormatOutil.addDays( middleDate, 
-1 ) );
           }     
           
else if( field == nextButton )
           {
               setCurrentDate( DateFormatOutil.addDays( middleDate, 
1 ) );
           } 
        }  
        
else
        {
          fieldChangeNotify(
1);
          
return false;
        }
        fieldChangeNotify(
1);
        
return true;
    }
     
    
protected void fieldChangeNotify(int context) 
    {
        
try {
            
this.getChangeListener().fieldChanged(this, context);
        } 
catch (Exception exception) {
        }
    }
      
}


posted on 2008-10-20 02:24 lincode 阅读(303) 评论(0)  编辑  收藏 所属分类: Blackberry

只有注册用户登录后才能发表评论。


网站导航: