设计可组装的j2me UI(四) 时间控件

开放过项目的人都知道。用户的需求是时刻变化的。我们要做到的只是不断的去适应这种变化。因为给钱的是人家。

今天这篇文章让我们来学习怎么样设计一个可以在j2me低级UI上显示的时钟。经过前面几篇文章相信大家都知道我的UI设计思路了。我们现在要做的就是设计一个Part(这个是什么来的,呵呵。如果没看过我前面文章的朋友们,建议你们先读下,我想会有好处的。^_^)。

我的控件思路是这样的。首先在整个屏幕中拿出一小块出来。然后在这一小块里面绘制显示时间(时间可以是纯文字,也可以是图片等),然后我们实现Runnable接口,让它没秒钟都刷新一下那一小块屏幕。是不是很简单呢。呵呵。下面让我们来看下具体代码吧

/******************************************************************** 
     * 
     * 版权说明,此程序仅供学习参考。不能用于商业 
     * 
     ********************************************************************/  
    package org.pook.ui;  
      
    import java.util.TimerTask;  
      
    import javax.microedition.lcdui.Display;  
    import javax.microedition.lcdui.Displayable;  
    import javax.microedition.lcdui.Graphics;  
      
    import org.pook.file.BookFileManager;  
    import org.pook.log.Log;  
    import org.pook.ui.core.Platform;  
    import org.pook.ui.form.Panel;  
    import org.pook.ui.timer.TimerTaskManager;  
    import org.pook.ui.util.GraphicsUtil;  
    import org.pook.util.DateTime;  
      
    /** 
     * 类名:TimerPart.java 
     
     * 编写日期: 2006-9-29 
     
     * 程序功能描述�? 
     
     * Demo: 
     
     * Bug: 
     
     * 
     * 程序变更日期 
     
     * 变更作�?? 
     
     * 变更说明 
     
     * 
     * @author wuhua 
    rrq12345@163.com 
     */  
    public class TimerPart extends Part implements Runnable{  
      
        Log log = Log.getLog("TimerPart");  
         
        /** 时间显示字段     */  
        private static int hour ;  
        private static int minute;  
        private static int second;  
         
        private static String time;  
         
        /** 用于执行消失窗口 */  
        protected TimerTask task;  
         
        /** 获取系统时间 **/  
        private DateTime dt;  
         
         
         
        private Display display;  
        private Displayable displayable;  
      
        private String h;  
      
        private String m;  
      
        private String s;  
         
        public TimerPart(Display display) {  
            super(Platform.WIDTH - 45, 0, 45, 20);  
            dt = new DateTime();  
            hour = dt.hour ;  
            minute = dt.minute ;  
            second = dt.second ;  
       
             time = hour + ":" + minute + ":" + second;  
               
           
            task = TimerTaskManager.getInstace().add(this, 1000);  
            this.display = display;  
        }  
      
        public void paint(Graphics g) {  
            g.setColor(0x00000);  
            g.drawString(time.toString(), view[X], view[Y], Graphics.TOP |  
                    Graphics.LEFT);  
        //    GraphicsUtil.darwString(g,new Boolean(BookFileManager.available()).toString(), view[X], view[Y]);  
      
        }  
      
        public void onClick(int keyCode) {  
           
        }  
      
        /** 
         * 刷新时间的方法,每隔1秒钟刷新�?�? 
         */  
        public void run() {  
               
             
            //更新时间  
             updateTime();  
             repaintTime();  
             
        }  
         
        /** 
         * 这里本不应该与程序又任何关联的�?�但考虑到�?��?? 
         * �?以就先这样先 
         * 
         */  
        private void repaintTime() {  
            if(display == null)  
                return;  
            displayable = display.getCurrent();  
            if(displayable instanceof Panel){  
                Panel panel = (Panel)displayable;  
                panel.repaintTimer();  
            }  
        }  
      
        /** 
         * 更新时间,频率是1�? 
         * 
         */  
        private void updateTime() {  
            second ++ ;  
            if(second == 60){  
                second = 0;  
                minute ++ ;  
            }  
             
            if(minute == 60){  
                minute = 0;  
                hour ++ ;  
            }  
             
            if(hour == 24 && minute == 0){  
                hour = 00;  
            }  
             
            h =   hour<10?("0"+hour):hour + "" ;  
            m =    minute<10?("0"+minute):minute + "";  
            s =   second<10?("0"+second):second + "";  
             
            time = h + ":" + m + ":" + s;  
        }  
      
      
      
      
    }  

具体的详细例子在:手机电子书阅读软件基本框架wuhua.iteye.com/admin/show/28821

看看这图片: