2012年11月2日 星期五

[ Java 套件 ] JDatePicker - Java Swing Date Picker : Swing 的日期套件

Preface: 
最近在開發桌面 UI 程式, 需要讓使用者可以視覺化的選擇日期, 但是很遺憾的是 Swing 內並沒有類似的物件 orz. 在拜完 Google 大神後發現了一個不錯用的套件 JDatePicker
 

到 sourceforge 下載套件後, 開始要使用時, 才發現完全不知道怎麼著手. orz. 文件也沒有提到如何使用. 因此就自己撰寫了範例程式 "JDatePickerDemo" 提供有興趣的人可以快速的入門. 

Sample code: 
透過這邊的範例, 你將知道如何整合 JDatePicker 套件到你的 UI. 假設你有個 UI 使用JFrame, 上面有 JTextField 與按鈕, 透過按下該按鈕會出現 Date Picker. 在你挑選完日期後, 該日期會自動的設定到你期望的 JTextField 文字框中. 這邊我客製化了一個類別 "JDatePickerDialog" 包裝了 JDatePicker 裡面常用的功能. 它是一個 JDialog 用來與使用者互動, 並且可以將使用者選擇的日期回傳. 要使用它首先要先建立它: 
  1. datePicker = new JDatePickerDialog(thistrue"Demo"); // arg1=Interactive frame; arg2=mode, arg3=title  
在建構子提供三個參數: 
- arg1: Interactive JFrame
- arg2: JDialog modality
- arg3: Title of dialog

接著我們要向它註冊一個 JTextField, 讓使用者在挑選完日期後, 將結果寫回該文字框: 
  1. datePicker.registerTF(jTextFieldDate);  
接著如果你有特殊日期格式的需求, 則可以如下設定寫回的日期格式: 
  1. datePicker.applyDateFormat(new SimpleDateFormat("yyyy-MM-dd"));  
最後下面是一個完整的使用範例: 
  1. package net.sourceforge.jdatepicker.demo;  
  2. import java.awt.BorderLayout;  
  3. import java.awt.event.ActionEvent;  
  4. import java.awt.event.ActionListener;  
  5. import java.text.SimpleDateFormat;  
  6.   
  7. import javax.swing.ImageIcon;  
  8. import javax.swing.JButton;  
  9. import javax.swing.JPanel;  
  10. import javax.swing.JTextField;  
  11. import javax.swing.SwingUtilities;  
  12. import javax.swing.WindowConstants;  
  13.   
  14. import net.sourceforge.jdatepicker.impl.JDatePickerDialog;  
  15.   
  16. public class JDatePickerDemo extends javax.swing.JFrame {  
  17.     private static final long serialVersionUID = 1L;  
  18.     private JPanel jPanelMain;  
  19.     private JTextField jTextFieldDate;  
  20.     private JButton jButtonDate;  
  21.       
  22.     //  Customized  
  23.     private JDatePickerDialog datePicker;  
  24.   
  25.     /** 
  26.     * Auto-generated main method to display this JFrame 
  27.     */  
  28.     public static void main(String[] args) {  
  29.         SwingUtilities.invokeLater(new Runnable() {  
  30.             public void run() {  
  31.                 JDatePickerDemo inst = new JDatePickerDemo();  
  32.                 inst.setLocationRelativeTo(null);  
  33.                 inst.setVisible(true);  
  34.             }  
  35.         });  
  36.     }  
  37.       
  38.     public JDatePickerDemo() {  
  39.         super();  
  40.         initGUI();  
  41.         // Setup JDatePicker here.  
  42.         datePicker = new JDatePickerDialog(thistrue"Demo"); // arg1=Interactive frame; arg2=mode, arg3=title  
  43.         datePicker.registerTF(jTextFieldDate);  
  44.         datePicker.applyDateFormat(new SimpleDateFormat("yyyy-MM-dd"));  
  45.     }  
  46.       
  47.     private void initGUI() {  
  48.         try {  
  49.             setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);  
  50.             {  
  51.                 jPanelMain = new JPanel();  
  52.                 getContentPane().add(jPanelMain, BorderLayout.CENTER);  
  53.                 jPanelMain.setBackground(new java.awt.Color(0,255,128));  
  54.                 jPanelMain.setLayout(null);  
  55.                 jPanelMain.setSize(30080);  
  56.                 {  
  57.                     jTextFieldDate = new JTextField();  
  58.                     jPanelMain.add(jTextFieldDate);  
  59.                     jTextFieldDate.setText("Date");  
  60.                     jTextFieldDate.setBounds(121231432);  
  61.                 }  
  62.                 {  
  63.                     jButtonDate = new JButton();  
  64.                     jPanelMain.add(jButtonDate);  
  65.                     jButtonDate.setBounds(332124132);  
  66.                     jButtonDate.setIcon(newImageIcon(getClass().getClassLoader().getResource("net/sourceforge/jdatepicker/demo/images/date.png")));  
  67.                     jButtonDate.addActionListener(new ActionListener() {  
  68.                         public void actionPerformed(ActionEvent evt) {  
  69.                             jButtonDateActionPerformed(evt);  
  70.                         }  
  71.                     });  
  72.                 }  
  73.             }  
  74.             pack();  
  75.             this.setSize(400100);  
  76.         } catch (Exception e) {  
  77.             //add your error handling code here  
  78.             e.printStackTrace();  
  79.         }  
  80.     }  
  81.       
  82.     private void jButtonDateActionPerformed(ActionEvent evt) {  
  83.         datePicker.setVisible(true);  
  84.     }  
  85.   
  86. }  
執行後會出現下面 UI: 
 

接著點取右邊日期圖案, 會出現下面 Dialog 提供使用者挑選日期: 
 

接著使用者可以在日期上 double click 滑鼠左鍵進行挑選, 這時會回到原先 UI 並在文字框已指定格式出現選擇日期: 
 

客製化的套件可以在 這裡 下載. 

Supplement: 
JDatePicker - Professional date components for Swing 
[ Java 代碼範本 ] java.text.SimpleDateFormat : 日期物件的格式化/文字化/標準化

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...