⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datefielddemo.java

📁 人民邮电出版社的《J2ME手机开发入门》全部源代码
💻 JAVA
字号:
/*
 * DateFieldDemo.java
 *
 * Created on 2005年4月18日, 下午2:58
 */

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

import java.util.*;
/**
 *
 * @author  Liu Bin
 * @version
 */
public class DateFieldDemo extends MIDlet
        implements CommandListener, ItemStateListener{
    private Display display;
    private Form form;
    
    private Command cmdSelect;
    //退出命令按钮
    private Command cmdExit;
    
    //用于选择时区
    private ChoiceGroup cgTimeZone;
    
    //用于设置日期和时间
    private DateField dfDate;
    private DateField dfTime;
    private DateField dfDateTime;
    
    //保存当前设置的TimeZone和Date
    private Calendar calCurrent;
    //显示当前的时区是否支持夏时制
    private StringItem siDaylightTime;
    //显示当前的日期
    private StringItem siDate;
    //显示当前的时间
    private StringItem siTime;
    
    //用于日期转换
    private static final String[] WEEK_DAY = { "日", "一", "二",  "三",
            "四", "五", "六"
    };
    
    
    public DateFieldDemo() {
        try {
            nbInit();
        } catch(Exception e) {
            e.printStackTrace();
        }
        
    }
    
    private void nbInit() throws Exception {
        cmdExit = new Command("退出", Command.EXIT, 0);
        form = new Form("DateField演示");
        form.addCommand(cmdExit);
        form.setCommandListener(this);
        form.setItemStateListener(this);
        
        //初始化当前时区为缺省时区
        calCurrent = Calendar.getInstance(TimeZone.getDefault());
        //获得当前时间
        calCurrent.setTime(new Date());
        
        //填充所有可以使用的时区
        String[] timezones = TimeZone.getAvailableIDs();
        cgTimeZone = new ChoiceGroup("请选择时区:", Choice.POPUP,
                timezones, null);
        int index = getTimeZoneID();
        if (index > -1) {
            cgTimeZone.setSelectedIndex(index, true);
        }
        siDaylightTime = new StringItem("是否支持夏时制:","", Item.PLAIN);
        siDate = new StringItem("当前的日期为:", "");
        siDate.setLayout(Item.LAYOUT_EXPAND);
        siTime = new StringItem("当前的时间为:", "");
        siTime.setLayout(Item.LAYOUT_EXPAND);
        
        updateUI();
    }
    
    public void startApp() {
        display = Display.getDisplay(this);
        display.setCurrent(form);
    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }
    
    /**
     * 处理命令按钮事件
     */
    public void commandAction(Command cmd, Displayable d) {
        if (cmd == cmdExit) {
            destroyApp(false);
        }
    }
    
    
    /**
     * 处理Item状态改变
     */
    public void itemStateChanged(Item item) {
        if (item == this.cgTimeZone) {
            updateUI();
        }
        
        if ((item == this.dfDate) || (item == this.dfDateTime)) {
            DateField df = (DateField)item;
            this.calCurrent.setTime(df.getDate());
            updateDate();
        }
        
        if (item == this.dfTime) {
            DateField df = (DateField)item;
            Calendar cal = Calendar.getInstance(this.calCurrent.getTimeZone());
            cal.setTime(df.getDate());
            //替换原来的时间
            this.calCurrent.set(Calendar.HOUR_OF_DAY,
                    cal.get(Calendar.HOUR_OF_DAY));
            this.calCurrent.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
            this.calCurrent.set(Calendar.SECOND, cal.get(Calendar.SECOND));
            updateDate();
        }
    }
    
    private int getTimeZoneID() {
        if ((this.calCurrent != null) && (this.cgTimeZone.size()>0)) {
            for (int i=0;i<this.cgTimeZone.size();i++) {
                if (this.cgTimeZone.getString(i).equals(
                        this.calCurrent.getTimeZone().getID())) {
                    return i;
                }
            }
        }
        return -1;
    }
    
    private void updateUI() {
        int index = this.cgTimeZone.getSelectedIndex();
        TimeZone tz = TimeZone.getTimeZone(
                this.cgTimeZone.getString(index));
        this.calCurrent.setTimeZone(tz);
        
        form.deleteAll();
        
        dfDate = new DateField("选择日期:", DateField.DATE,
                calCurrent.getTimeZone());
        dfTime = new DateField("选择时间:", DateField.TIME,
                calCurrent.getTimeZone());
        dfDateTime = new DateField("选择日期和时间:",
                DateField.DATE_TIME, calCurrent.getTimeZone());
        
        siDaylightTime.setText(String.valueOf(
                calCurrent.getTimeZone().useDaylightTime()));
        
        form.append(cgTimeZone);
        form.append(siDaylightTime);
        form.append(dfDate);
        form.append(dfTime);
        form.append(dfDateTime);
        form.append(siDate);
        form.append(siTime);
        
        updateDate();
    }
    
    private void updateDate() {
        Date date = this.calCurrent.getTime();        
        this.dfDate.setDate(date);
        
        //Time模式下的时间值不能超过一天,因此作如下转变
        this.dfTime.setInputMode(DateField.DATE_TIME);
        this.dfTime.setDate(date);
        this.dfTime.setInputMode(DateField.TIME);
        
        this.dfDateTime.setDate(date);
        this.siDate.setText(formatDate());
        this.siTime.setText(formatTime());
    }
    
    /**
     *  格式化日期值
     */
    private String formatDate() {
        StringBuffer sb = new StringBuffer();
        sb.append(calCurrent.get(Calendar.YEAR));
        sb.append("年");
        sb.append(calCurrent.get(Calendar.MONTH)+1);
        sb.append("月");
        sb.append(calCurrent.get(Calendar.DAY_OF_MONTH));
        sb.append("日  ");
        sb.append("   星期");
        int index = calCurrent.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY;
        sb.append(WEEK_DAY[index]);
        return sb.toString();
    }
    
    private String formatTime() {
        StringBuffer sb = new StringBuffer();
        int t = calCurrent.get(Calendar.HOUR_OF_DAY);
        if (t<10) {
            sb.append("0");     //如果不够两位则补零
        }
        sb.append(t);
        sb.append(':');
        
        t = calCurrent.get(Calendar.MINUTE);
        if (t<10) {
            sb.append("0");     //如果不够两位则补零
        }
        sb.append(t);
        sb.append(':');
        
        t = calCurrent.get(Calendar.SECOND);
        if (t<10) {
            sb.append("0");     //如果不够两位则补零
        }
        sb.append(t);
        
        return sb.toString();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -