最近在開發桌面 UI 程式, 需要讓使用者可以視覺化的選擇日期, 但是很遺憾的是 Swing 內並沒有類似的物件 orz. 在拜完 Google 大神後發現了一個不錯用的套件 JDatePicker:
到 sourceforge 下載套件後, 開始要使用時, 才發現完全不知道怎麼著手. orz. 文件也沒有提到如何使用. 因此就自己撰寫了範例程式 "JDatePickerDemo" 提供有興趣的人可以快速的入門.
Sample code:
透過這邊的範例, 你將知道如何整合 JDatePicker 套件到你的 UI. 假設你有個 UI 使用JFrame, 上面有 JTextField 與按鈕, 透過按下該按鈕會出現 Date Picker. 在你挑選完日期後, 該日期會自動的設定到你期望的 JTextField 文字框中. 這邊我客製化了一個類別 "JDatePickerDialog" 包裝了 JDatePicker 裡面常用的功能. 它是一個 JDialog 用來與使用者互動, 並且可以將使用者選擇的日期回傳. 要使用它首先要先建立它:
- datePicker = new JDatePickerDialog(this, true, "Demo"); // arg1=Interactive frame; arg2=mode, arg3=title
接著我們要向它註冊一個 JTextField, 讓使用者在挑選完日期後, 將結果寫回該文字框:
- datePicker.registerTF(jTextFieldDate);
- datePicker.applyDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
- package net.sourceforge.jdatepicker.demo;
- import java.awt.BorderLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.text.SimpleDateFormat;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JPanel;
- import javax.swing.JTextField;
- import javax.swing.SwingUtilities;
- import javax.swing.WindowConstants;
- import net.sourceforge.jdatepicker.impl.JDatePickerDialog;
- public class JDatePickerDemo extends javax.swing.JFrame {
- private static final long serialVersionUID = 1L;
- private JPanel jPanelMain;
- private JTextField jTextFieldDate;
- private JButton jButtonDate;
- // Customized
- private JDatePickerDialog datePicker;
- /**
- * Auto-generated main method to display this JFrame
- */
- public static void main(String[] args) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- JDatePickerDemo inst = new JDatePickerDemo();
- inst.setLocationRelativeTo(null);
- inst.setVisible(true);
- }
- });
- }
- public JDatePickerDemo() {
- super();
- initGUI();
- // Setup JDatePicker here.
- datePicker = new JDatePickerDialog(this, true, "Demo"); // arg1=Interactive frame; arg2=mode, arg3=title
- datePicker.registerTF(jTextFieldDate);
- datePicker.applyDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
- }
- private void initGUI() {
- try {
- setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
- {
- jPanelMain = new JPanel();
- getContentPane().add(jPanelMain, BorderLayout.CENTER);
- jPanelMain.setBackground(new java.awt.Color(0,255,128));
- jPanelMain.setLayout(null);
- jPanelMain.setSize(300, 80);
- {
- jTextFieldDate = new JTextField();
- jPanelMain.add(jTextFieldDate);
- jTextFieldDate.setText("Date");
- jTextFieldDate.setBounds(12, 12, 314, 32);
- }
- {
- jButtonDate = new JButton();
- jPanelMain.add(jButtonDate);
- jButtonDate.setBounds(332, 12, 41, 32);
- jButtonDate.setIcon(newImageIcon(getClass().getClassLoader().getResource("net/sourceforge/jdatepicker/demo/images/date.png")));
- jButtonDate.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent evt) {
- jButtonDateActionPerformed(evt);
- }
- });
- }
- }
- pack();
- this.setSize(400, 100);
- } catch (Exception e) {
- //add your error handling code here
- e.printStackTrace();
- }
- }
- private void jButtonDateActionPerformed(ActionEvent evt) {
- datePicker.setVisible(true);
- }
- }
接著點取右邊日期圖案, 會出現下面 Dialog 提供使用者挑選日期:
接著使用者可以在日期上 double click 滑鼠左鍵進行挑選, 這時會回到原先 UI 並在文字框已指定格式出現選擇日期:
客製化的套件可以在 這裡 下載.
Supplement:
* JDatePicker - Professional date components for Swing
* [ Java 代碼範本 ] java.text.SimpleDateFormat : 日期物件的格式化/文字化/標準化
沒有留言:
張貼留言