var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-20738293-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script')"/>
<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jutleo
    歡迎走進有風的地方~~
    posts - 63,  comments - 279,  trackbacks - 0
    最近有點亂糟糟,還是繼續寫完剩下的:
    根據 黑莓開發學習入門系列,自己動手實現一個日歷軟件(二)實現一個黑莓應用程序最基本的結構,我們真正的可以實現日歷了:
    新建一個工程 calender:作為日歷的完整工程開始實現一個日歷小程序 
    創建類CalendarMain.java 作為日歷的入口
    創建日歷布局外觀類:CalenderLayout.java,作為主要的日歷布局
    CalendarMain類的應該如下結構:
    package org.bulktree.calender;

    import net.rim.device.api.ui.UiApplication;
    import net.rim.device.api.ui.container.MainScreen;

    public class CalendarMain extends UiApplication {

        
    public static void main(String[] args) {
            CalendarMain theApp 
    = new CalendarMain();
            theApp.enterEventDispatcher();
        }

        
    public CalendarMain() {
            MainScreen mainScreen 
    = new MainScreen();
            CalenderLayout calender 
    = new CalenderLayout();
            mainScreen.add(calender.calLayout());
            pushScreen(mainScreen);
        }
    }
    黑莓程序入口總是先實現當前的屏幕pushScreen(mainScreen)壓入當前屏幕隊列,然后維護主應用程序事件線程。
    對于屏幕布局就很簡單了:先畫一個布局圖 
    我用Excel模擬出一個日歷,不同的顏色區域(當前日歷紅色除外),把整個日歷作為分成三塊,如果按照BlackBerry程序的方式,分為三個布局管理器,最上面是一個HorizontalFieldManager,日歷的周那個區域也是HorizontalFieldManager,日期區域每行看成一個HorizontalFieldManager,整體看成一個VerticalFieldManager,而整個日歷可看成一個VerticalFieldManager去規范里面的布局。這樣一個完整的日歷就出來了。具體實現如下:
    package org.bulktree.calender;

    import java.util.Calendar;

    import net.rim.device.api.ui.Field;
    import net.rim.device.api.ui.FocusChangeListener;
    import net.rim.device.api.ui.Font;
    import net.rim.device.api.ui.Manager;
    import net.rim.device.api.ui.component.LabelField;
    import net.rim.device.api.ui.container.HorizontalFieldManager;
    import net.rim.device.api.ui.container.VerticalFieldManager;

    public class CalenderLayout {
        
        
    private static String[] wks = {""""""""""""""};
        
        
    private LabelField ax = null;
        
        
    public Manager calLayout() {
            Manager calender 
    = new VerticalFieldManager();
            
    //日歷頭
            Manager calHeader = new HorizontalFieldManager();
            Calendar cale 
    = Calendar.getInstance();
            ChineseCalendar chin 
    = new ChineseCalendar(cale);
            String calHeaderString 
    = "陰歷:" + CalendarUtil.getCurrentYear() + "年 " + chin.getChineseCalendarMonth() + "月 "+ chin.getChinaDayString() + "日{" + chin.getCyclical() + "-" + chin.getAnimalsYear() + "年}";
            ax 
    = new LabelField(calHeaderString, LabelField.HCENTER);
            setFont(ax, 
    131);
            calHeader.add(ax);
            LabelField ay 
    = new LabelField("  陽歷:" + CalendarUtil.getCurrentMonth() + "");
            setFont(ay, 
    131);
            calHeader.add(ay);
            
            calender.add(calHeader);
            
    //星期頭
            Manager weakHeader = new HorizontalFieldManager();
            CalenderField whf 
    = null;
            
            
    for (int i = 0; i < 7; i++) {
                whf 
    = new CalenderField(wks[i], CalenderField.RECTANGLE, CalenderField.NON_FOCUSABLE, 1);
                setFont(whf, 
    151);
                weakHeader.add(whf);
            }
            calender.add(weakHeader);
            
            
    //日歷體
            int a = CalendarUtil.getWeekCurrntMonthFirstDay();
    //        int a = CalendarUtil.getWeekMonthFirstDay(2011, 1);
            int b = CalendarUtil.getCurrentDaysOfMonth();
    //        int b = CalendarUtil.getDaysOfMonth(2011, 1);
            Manager calBody = new HorizontalFieldManager();
            calBody.setBorder(
    1111);
            
    for (int i = 0; i < a; i++) {
                calBody.add(
    new CalenderField("", CalenderField.RECTANGLE, CalenderField.NON_FOCUSABLE, 1));
            }
            CalenderField yac 
    = null;
            CalenderField yc 
    = null;
            
    for (int i = 1; i <= b; i++) {
                Manager cellManger 
    = new VerticalFieldManager();
                yac 
    = new CalenderField(i + "", CalenderField.HCENTER, CalenderField.FOCUSABLE, 1);
                setFont(yac, 
    150);
                cellManger.add(yac);
                Calendar cx 
    = Calendar.getInstance();
                cx.set(Calendar.DATE, i);
                
    final ChineseCalendar chines = new ChineseCalendar(cx);
                yc 
    = new CalenderField(chines.getChinaDayString(), CalenderField.HCENTER, CalenderField.NON_FOCUSABLE, 1);
                setFont(yc, 
    100);
                
                yac.setFocusListener(
    new FocusChangeListener() {
                    
    public void focusChanged(Field field, int eventType) {
                        String text 
    = "陰歷:" + chines.getChineseCalenderYear() + "年 " + chines.getChineseCalendarMonth() + "月 "+ chines.getChinaDayString() + "日{" + chines.getCyclical() + "-" + chines.getAnimalsYear() + "年}";
                        updateCalendarHeader(text);
                    }
                });
                
                
    if (Calendar.getInstance().get(Calendar.DATE) == i) {
                    setFont(yac, 
    151);
                    setFont(yc, 
    101);
                }
                cellManger.add(yc);
                calBody.add(cellManger);
                
    if ((i + a) % 7 ==0) {
                    calender.add(calBody); 
                    calBody 
    = new HorizontalFieldManager();
                }
            }
            calender.add(calBody);
            
            
    return calender;
        }

        
    /**
         * 設置字體風格
         * 
    @param obj
         * 
    @param size
         * 
    @param isBlod 是否加粗, 1加粗, 0 正常
         
    */
        
    private void setFont(Field obj, int size, int isBlod) {
            
    int fontStyle = isBlod == 1 ? Font.BOLD : Font.PLAIN;
            obj.setFont(Font.getDefault().derive(fontStyle, size));
        }
        
        
    private void updateCalendarHeader(String text) {
            ax.setText(text);
        }
    }
    這里面用到CalendarUtil工具類,ChineseCalendar農歷工具類,CalenderField自定義的UI(上篇專門說明過)。現貼出代碼如下:
    package org.bulktree.calender;

    import java.util.Calendar;

    /**
     * 日歷工具類
     * 
     * 
    @author Administrator
     * 
     
    */
    public class CalendarUtil {

        
    private static Calendar cal = Calendar.getInstance();

        
    public static String getCurrentYear() {
            
    return "" + cal.get(Calendar.YEAR);
        }

        
    public static String getCurrentMonth() {
            
    return "" + (cal.get(Calendar.MONTH) + 1);
        }

        
    //返回當前月第一天的星期
        public static int getWeekCurrntMonthFirstDay() {
            cal 
    = Calendar.getInstance();
            
    return getWeekMonthFirstDay(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH));
        }
        
        
    //返回指定月第一天的星期
        public static int getWeekMonthFirstDay(int year, int month) {
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.MONTH, month);
            cal.set(Calendar.DATE, 
    1);
            
    return cal.get(Calendar.DAY_OF_WEEK) - 1;
        }
        
        
    //返回當月天數
        public static int getCurrentDaysOfMonth() {
            cal 
    = Calendar.getInstance();
            
    return getDaysOfMonth(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH));
        }
        
    //返回指定月的天數
        public static int getDaysOfMonth(int year, int month) {
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.MONTH, month 
    + 1);
            cal.set(Calendar.DAY_OF_MONTH, 
    1);
            cal.set(Calendar.DATE, cal.get(Calendar.DATE) 
    -1);
            
    return cal.get(Calendar.DAY_OF_MONTH);
        }
    }
    package org.bulktree.calender;

    import java.util.Calendar;

    public class ChineseCalendar {   
        
    private int year;   
        
    private int month;   
        
    private int day;   
        
    private boolean leap;   
        
    final static String chineseNumber[] = {"""""""""""""""""""""十一""十二"};   
        
    final static long[] lunarInfo = new long[]   
        {
    0x04bd80x04ae00x0a5700x054d50x0d2600x0d9500x165540x056a00x09ad00x055d2,   
         
    0x04ae00x0a5b60x0a4d00x0d2500x1d2550x0b5400x0d6a00x0ada20x095b00x14977,   
         
    0x049700x0a4b00x0b4b50x06a500x06d400x1ab540x02b600x095700x052f20x04970,   
         
    0x065660x0d4a00x0ea500x06e950x05ad00x02b600x186e30x092e00x1c8d70x0c950,   
         
    0x0d4a00x1d8a60x0b5500x056a00x1a5b40x025d00x092d00x0d2b20x0a9500x0b557,   
         
    0x06ca00x0b5500x153550x04da00x0a5d00x145730x052d00x0a9a80x0e9500x06aa0,   
         
    0x0aea60x0ab500x04b600x0aae40x0a5700x052600x0f2630x0d9500x05b570x056a0,   
         
    0x096d00x04dd50x04ad00x0a4d00x0d4d40x0d2500x0d5580x0b5400x0b5a00x195a6,   
         
    0x095b00x049b00x0a9740x0a4b00x0b27a0x06a500x06d400x0af460x0ab600x09570,   
         
    0x04af50x049700x064b00x074a30x0ea500x06b580x055c00x0ab600x096d50x092e0,   
         
    0x0c9600x0d9540x0d4a00x0da500x075520x056a00x0abb70x025d00x092d00x0cab5,   
         
    0x0a9500x0b4a00x0baa40x0ad500x055d90x04ba00x0a5b00x151760x052b00x0a930,   
         
    0x079540x06aa00x0ad500x05b520x04b600x0a6e60x0a4e00x0d2600x0ea650x0d530,   
         
    0x05aa00x076a30x096d00x04bd70x04ad00x0a4d00x1d0b60x0d2500x0d5200x0dd45,   
         
    0x0b5a00x056d00x055b20x049b00x0a5770x0a4b00x0aa500x1b2550x06d200x0ada0};   
      
        
    //====== 傳回農歷 y年的總天數   
        final private static int yearDays(int y) {   
            
    int i, sum = 348;   
            
    for (i = 0x8000; i > 0x8; i >>= 1) {   
                
    if ((lunarInfo[y - 1900& i) != 0) sum += 1;   
            }   
            
    return (sum + leapDays(y));   
        }   
      
        
    //====== 傳回農歷 y年閏月的天數   
        final private static int leapDays(int y) {   
            
    if (leapMonth(y) != 0) {   
                
    if ((lunarInfo[y - 1900& 0x10000!= 0)   
                    
    return 30;   
                
    else  
                    
    return 29;   
            } 
    else  
                
    return 0;   
        }   
      
        
    //====== 傳回農歷 y年閏哪個月 1-12 ,&nb#
    posted on 2011-01-26 15:23 凌晨風 閱讀(2326) 評論(0)  編輯  收藏 所屬分類: BlackBerry

    <2011年1月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(11)

    我參與的團隊

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    收藏夾

    圍脖

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品亚洲专一区二区三区| 日本在线免费播放| 最新精品亚洲成a人在线观看| 精品四虎免费观看国产高清午夜 | 亚洲国产一区明星换脸| 日本在线免费观看| 亚洲妇女无套内射精| 久久夜色精品国产亚洲| 色窝窝免费一区二区三区| 一个人看的在线免费视频| 亚洲综合图片小说区热久久| 免费又黄又爽又猛的毛片| 久99久精品免费视频热77| 亚洲国产精品成人午夜在线观看| 亚洲国产另类久久久精品黑人| 女人张开腿等男人桶免费视频 | 国产网站在线免费观看| 可以免费观看的毛片| 亚洲av永久中文无码精品| 亚洲精品高清视频| 亚洲精品成人在线| 日韩吃奶摸下AA片免费观看| 久久九九全国免费| 香蕉97碰碰视频免费| 亚洲国产精品一区二区三区在线观看 | 久久九九久精品国产免费直播| 亚洲熟妇丰满xxxxx| 亚洲综合激情六月婷婷在线观看 | 色噜噜AV亚洲色一区二区| 日韩免费视频观看| 国产免费的野战视频| 全黄大全大色全免费大片| 国产精品亚洲色婷婷99久久精品| 亚洲香蕉久久一区二区| 久久久久久亚洲AV无码专区| 亚洲夜夜欢A∨一区二区三区| 国产色婷婷精品免费视频| 国产人在线成免费视频| 57pao一国产成视频永久免费| 免费无码又爽又刺激网站| 成人免费网站久久久|