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

基於 Java Swing 開發可視化日期選擇器組件 (DateButton + CalendarChooser)

     編輯:Java 相關知識

動機

標準 Swing 缺乏原生日期選擇組件。手工解析文本框輸入易出錯、用戶體驗差。本文實現一個可復用的 DateButton (顯示日期、彈出選擇) 與 CalendarChooser (月曆對話框),封裝 java.util.Calendar、DateFormat 等核心 API,提供直觀的視覺化交互。

核心類設計

類職責關鍵 API
DateButton繼承 JButton,顯示日期文本,點擊彈出 CalendarChoosergetDate()/setDate(Date), PropertyChangeListener
CalendarChooser模態對話框,包含年/月下拉框、日期網格面板、確定/取消按鈕select(Date)/select() 返回選中日期或 null

DateButton 使用示例

DateButton dateBtn = new DateButton(new Date()); // 初始化為今天
panel.add(dateBtn);

// 監聽日期變更
dateBtn.addPropertyChangeListener("date", evt -> {
    Date newDate = (Date) evt.getNewValue();
    System.out.println("用戶選擇: " + newDate);
});

CalendarChooser 獨立使用

CalendarChooser chooser = new CalendarChooser(parentFrame, "選擇出生日期");
Date birth = chooser.select(); // 彈出對話框,阻塞直到用戶操作
if (birth != null) { /* 用戶點擊確定 */ }

實現亮點

  • 自定義渲染:每月日曆網格由自繪 JPanel 組成,處理滑鼠懸停/選中高亮、鍵盤導航。
  • 國際化就緒:星期/月份名稱、起始星期幾、年份範圍 (FIRST_YEAR/LAST_YEAR) 皆為常量,易本地化。
  • 模型-視圖分離:日期計算邏輯集中在 Calendar,UI 僅負責渲染與事件分發。
  • 線程安全:Swing 組件在 EDT 中操作,對話框模態阻塞不阻塞 EDT。

視覺效果

DateButton外觀 CalendarChooser彈出

擴展建議

  • 集成 JFormattedTextField 實現直接輸入同步。
  • 支持日期範圍選擇 (雙月曆)。
  • 適配 Java 8+ java.time.LocalDate 替代 Date。

結語

通過組合 Swing 基礎組件與核心日期 API,僅用幾百行代碼即可構建專業級日期選擇器,消除無效輸入、提升用戶體驗,是掌握 Swing 自定義組件開發的經典練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved