日期是最基本的數據形式之一
因此很多語言或者數據庫都提供了對日期的支持
或內置或提供這一類的庫
Java也不例外
Java的應用編程接口提供了以跨平台獨立語言的方式描述
計算
對比
顯示以及便攜式分析日期
在這篇文章裡
我要講講關於Swing的自定義控制
允許你在視覺上獲取時間信息而不是用敲命令的方式
用這種方法
你可以避免無效的時間信息
讓你的使用者以視覺的方式得到享受
Java中的日期 Java描述日期和時間的方法使用傳統的Date命令或者Java的一些子庫
不管它的名字是什麼
日期的類並沒有普通意義上的日期的概念(日
月
年等等)技術上講
它僅僅是從
年
月
日
:
:
GMT開始百萬分之一秒的累加的一個結果
盡管這些關於日期的類有各種各樣的處理日期的方法
這都是不夠的
為了方便的解決日期問題
JDK
介紹了一個抽象的類java
util
Calendar
具體的計算日期的子類都會根據日歷系統使用一個指向特定日期的指針
這是因為日歷系統歷來就是有很多種方法來計算自己的日期(比如陽歷
羅馬歷
陰歷)
Java應用編程接口提供了名為java
util
GregorianCalendar的類來根據陽歷系統處理日期信息
最終
名為java
text
DateFormat的類就是一種抽象的處理格式解釋日期種類的獨立於語言之外的方式
這種方式依靠那些慣例
法則
以及已知的語言要求的位置運行著
名為DateFormat的具體的子類進行實際的工作
例如
名為java
text
SimpleDateFormat的子類允許你根據現有的方式分析或者設定一個日期的格式
總體來說
這三個最基本的類(Date
Calendar
以及 DateFormat)提供了強大的靈活的處理日期的體系
也許開始看來會有些疑惑
但你一旦明白了
你就會看到這樣的結構是十分有意義的
並且在其背後有很強的邏輯背景
(看看JDK的API文檔
你就會得到根多的文檔和例子)
定做的日期控制 盡管
Java提供了你可以對日期數據操作的方法
如果讓你處理三個不同的類
看起來也有些麻煩
有時你需要使用很多方法
利用很多實體來完成一個簡單的任務
除那些之外
Swing並不能提供進入日期的組件
當然
如果使用標准的控制如text box也不難完成
不過
日期在應用中是如此的常見
以至於我們常常一遍一遍地寫相同的代碼
輸入
分析
檢查時間
基於以上幾點原因考慮
我建立了一個簡單的自定義的控制
你可以使用它來訪問日期數據
基本上說
這就是一個顯示日期的標准的按鈕 (請看圖A)
圖 A 自定義日期控制
當你點擊之後
會彈出一個日期對話框
並允許你選擇一個新的日期 (請看表格B)
點擊OK鍵完成一次更新
圖 B 日歷對話框彈出 這樣做簡化了應用邏輯
因為使用者不會訪問到一個無效的日期
並且由於對話框看上去像一個日歷
這樣做更有利於使用者掌握星期幾這個非常有用的日期信息
自定義的按鍵控制在名為DateButton的類 (列表A)中描述
使用起來非常簡明—僅僅是列舉一個名為DateButton的實體
並且像加載普通的控制一樣把它加到一個方框中
按鍵就是表示的日期的實體
執行起來就像鍵入
date
命令的反映一樣
這就意外著只要名為PropertyChangeListener的時間寄存器發生變化你就可以設置並得到時間
表格 A說明了名為 DateButton 的應用編程接口
並且 列表B是一個使用的例子
表格 A
自定義按鍵控制的應用編程接口 日歷對話框
除了自定義一個名為DateButton的控制器之外
我們還要建立一個自定義的對話框
名為CalendarChooser (參照 列表 C)
你可以自由地從列表中選擇月份
年份或日子 (參照表格B)
盡管它是根據名為Datebutton控制自動顯示的
你也可以用你自己的方法來使用它
建立一個名為 CalendarChooser的類
使用一個選好的方式來運行它(參照表格B完成應用編程接口)
表格 B
日歷對話框應用編程接口
這個名為DateChooser的類
有些復雜
我不得不對每個月的日歷建立一個新的控制器
因為這些標准控制裡面沒有我需要的
另一方面講
這也說明了敬愛能力一個新的控制是多麼地容易
靠鼠標和鍵盤地互動就能完成
注意到在年份選擇列表中年份的顯示
是由名為FIRST_YEAR和 LAST_YEAR的常數預先決定的
同樣地
其它常數也決定一些對話框視覺方面(如顏色)的效果
稍加設計
自由地修改這些參數並不困難
同樣地
非常重要的一點
名為DateChooser的類和名為DateButton的類都是以英式(月份和星期幾)或美式日期格式定義的
由於這些也是用常數來定義的
所以修改起來也十分簡單
如果你想修改的話
這也是完全和語言無關的
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27033.html