DateTimeRenderer.java
上传用户:haobig99
上传日期:2022-06-15
资源大小:369k
文件大小:5k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
  3.  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4.  *
  5.  * This code is free software; you can redistribute it and/or modify it
  6.  * under the terms of the GNU General Public License version 2 only, as
  7.  * published by the Free Software Foundation.  Sun designates this
  8.  * particular file as subject to the "Classpath" exception as provided
  9.  * by Sun in the LICENSE file that accompanied this code.
  10.  *
  11.  * This code is distributed in the hope that it will be useful, but WITHOUT
  12.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14.  * version 2 for more details (a copy is included in the LICENSE file that
  15.  * accompanied this code).
  16.  *
  17.  * You should have received a copy of the GNU General Public License version
  18.  * 2 along with this work; if not, write to the Free Software Foundation,
  19.  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20.  *
  21.  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22.  * CA 95054 USA or visit www.sun.com if you need additional information or
  23.  * have any questions.
  24.  */
  25. package com.sun.lwuit.spinner;
  26. import com.sun.lwuit.Component;
  27. import com.sun.lwuit.List;
  28. import com.sun.lwuit.list.DefaultListCellRenderer;
  29. import java.util.Calendar;
  30. import java.util.Date;
  31. /**
  32.  * A renderer that can represent values for Date and time, time is represented as an integer
  33.  * for seconds since midnight. This is formatted accordingly by the renderer
  34.  *
  35.  * @author Shai Almog
  36.  */
  37. class DateTimeRenderer extends DefaultListCellRenderer {
  38.     private boolean date;
  39.     private int type;
  40.     private char separatorChar;
  41.     private boolean twentyFourHours;
  42.     private boolean showSeconds;
  43.     private DateTimeRenderer() {
  44.         super(false);
  45.     }
  46.     boolean isShowSeconds() {
  47.         return showSeconds;
  48.     }
  49.     /**
  50.      * Construct a time renderer
  51.      *
  52.      * @param twentyFourHours show the value as 24 hour values or AM/PM
  53.      * @param showSeconds show the value of the seconds as well or hide it
  54.      */
  55.     public static DateTimeRenderer createTimeRenderer(boolean twentyFourHours, boolean showSeconds) {
  56.         DateTimeRenderer d = new DateTimeRenderer();
  57.         d.twentyFourHours = twentyFourHours;
  58.         d.showSeconds = showSeconds;
  59.         return d;
  60.     }
  61.     /**
  62.      * Constructs a date renderer
  63.      *
  64.      * @param separatorChar char separating the entries within the renderer such as /, - etc.
  65.      * @param format the date, one of the constant values in this class
  66.      */
  67.     public static DateTimeRenderer createDateRenderer(char separatorChar, int format) {
  68.         DateTimeRenderer d = new DateTimeRenderer();
  69.         d.date = true;
  70.         d.separatorChar = separatorChar;
  71.         d.type = format;
  72.         return d;
  73.     }
  74.     private String twoDigits(int i) {
  75.         if(i < 10) {
  76.             return "0" + i;
  77.         }
  78.         return "" + i;
  79.     }
  80.     /**
  81.      * @inheritDoc
  82.      */
  83.     public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
  84.         if(date) {
  85.             Calendar c = Calendar.getInstance();
  86.             c.setTime((Date)value);
  87.             int day = c.get(Calendar.DAY_OF_MONTH);
  88.             int month = c.get(Calendar.MONTH) + 1;
  89.             int year = c.get(Calendar.YEAR);
  90.             switch(type) {
  91.                 case Spinner.DATE_FORMAT_DD_MM_YYYY:
  92.                     value = twoDigits(day) + separatorChar + twoDigits(month) + separatorChar + year;
  93.                     break;
  94.                 case Spinner.DATE_FORMAT_MM_DD_YYYY:
  95.                     value = twoDigits(month) + separatorChar + twoDigits(day) + separatorChar + year;
  96.                     break;
  97.                 case Spinner.DATE_FORMAT_DD_MM_YY:
  98.                     value = twoDigits(day) + separatorChar + twoDigits(month) + separatorChar + (year % 100);
  99.                     break;
  100.                 case Spinner.DATE_FORMAT_MM_DD_YY:
  101.                     value = twoDigits(month) + separatorChar + twoDigits(day) + separatorChar + (year % 100);
  102.                     break;
  103.             }
  104.         } else {
  105.             int v = ((Integer)value).intValue();
  106.             int seconds = v % 60;
  107.             v /= 60;
  108.             int minutes = v % 60;
  109.             v /= 60;
  110.             int hours;
  111.             if(twentyFourHours) {
  112.                 hours = v % 24;
  113.             } else {
  114.                 hours = v % 12;
  115.             }
  116.             if(showSeconds) {
  117.                 value = twoDigits(hours) + ":" + twoDigits(minutes) + ":" + twoDigits(seconds);
  118.             } else {
  119.                 value = twoDigits(hours) + ":" + twoDigits(minutes);
  120.             }
  121.         }
  122.         return super.getListCellRendererComponent(list, value, index, isSelected);
  123.     }
  124.     /**
  125.      * @return the twentyFourHours
  126.      */
  127.     public boolean isTwentyFourHours() {
  128.         return twentyFourHours;
  129.     }
  130. }