Java 日期時間體系回顧
java.util.Date:毫秒時間戳(自 1970-01-01 UTC),無時區/日曆概念,多數方法已棄用。
java.util.Calendar(抽象類)+ GregorianCalendar:提供年/月/日/時/分/秒字段運算、滾動、比較,支持國際化日曆系統。
java.text.DateFormat + SimpleDateFormat:本地化格式化/解析,模式字母(y/M/d/H/m/s/S/E 等)。
自定義 DateButton 組件
設計目標
- 繼承
JButton,按鈕文本顯示當前日期。
- 點擊彈出
CalendarChooser 對話框選擇日期。
- 實現
PropertyChangeListener 支持綁定/監聽日期變更。
核心 API
| 方法 | 說明 |
DateButton() | 默認系統日期 |
DateButton(Date) | 指定初始日期 |
getDate() | 獲取選中日期 |
setDate(Date) | 設置日期並更新按鈕文本 |
CalendarChooser 日曆對話框
視覺結構
- 頂部:年份下拉框(常量
FIRST_YEAR~LAST_YEAR)、月份下拉框。
- 中部:星期標題行 + 6×7 日期網格按鈕,灰色標識非本月日期,高亮今日/選中日期。
- 底部:確定/取消按鈕。
交互邏輯
- 構造時傳入父窗口(
Frame/Dialog)與標題。
select(Date initial) 顯示模態對話框,初始化網格。
- 用戶點擊日期按鈕更新選中值,雙擊或點確定返回
Date,取消返回 null。
- 鍵盤導航:方向鍵翻月/選日,Enter 確認,Esc 取消。
國際化與定製
- 星期/月份名稱從
DateFormatSymbols 獲取,支持 Locale 切換。
- 顏色、字體、年份範圍均為常量,易於擴展為屬性配置。
集成使用示例
DateButton btn = new DateButton();
panel.add(btn);
btn.addPropertyChangeListener("date", evt -> {
Date newDate = (Date) evt.getNewValue();
// 更新業務模型
});
優化建議
- 對話框複用:單例模式避免重複創建開銷。
- 渲染優化:
JButton 渲染器改用 JLabel + 滑鼠監聽器減輕組件權重。
- 無障礙支持:設置
AccessibleName、鍵盤焦點遍歷順序。
- 上一篇文章: Java Servlet 生命週期與線程安全實戰
- 下一篇文章: Java 虛擬機核心原理深度筆記:類加載、內存模型、線程與執行引擎
Copyright ©
程式碼之家 All Rights Reserved