首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Swing 自定義日曆控件開發實戰

     編輯:Java 相關知識

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

CalendarChooser 日曆對話框

視覺結構

  • 頂部:年份下拉框(常量 FIRST_YEAR~LAST_YEAR)、月份下拉框。
  • 中部:星期標題行 + 6×7 日期網格按鈕,灰色標識非本月日期,高亮今日/選中日期。
  • 底部:確定/取消按鈕。

交互邏輯

  1. 構造時傳入父窗口(Frame/Dialog)與標題。
  2. select(Date initial) 顯示模態對話框,初始化網格。
  3. 用戶點擊日期按鈕更新選中值,雙擊或點確定返回 Date,取消返回 null。
  4. 鍵盤導航:方向鍵翻月/選日,Enter 確認,Esc 取消。

國際化與定製

  • 星期/月份名稱從 DateFormatSymbols 獲取,支持 Locale 切換。
  • 顏色、字體、年份範圍均為常量,易於擴展為屬性配置。

集成使用示例

DateButton btn = new DateButton();
panel.add(btn);
btn.addPropertyChangeListener("date", evt -> {
    Date newDate = (Date) evt.getNewValue();
    // 更新業務模型
});

優化建議

  • 對話框複用:單例模式避免重複創建開銷。
  • 渲染優化:JButton 渲染器改用 JLabel + 滑鼠監聽器減輕組件權重。
  • 無障礙支持:設置 AccessibleName、鍵盤焦點遍歷順序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法說明
DateButton()默認系統日期
DateButton(Date)指定初始日期
getDate()獲取選中日期
setDate(Date)設置日期並更新按鈕文本