JAVA本身並沒有這功能,因此我上網搜尋找到ㄧ個別人寫好的工具,DatePopup

原始碼:


import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.lang.*;

public class DatePopup extends JDialog implements java.awt.event.ActionListener {
    private JPanel mPanel1 = new JPanel();
    private JPanel mPanel2 = new JPanel();
    private JPanel mPanel3 = new JPanel();
    private JPanel mPanel4 = new JPanel();
    private JButton mNewButton;
    private JTextField mText;
    private int mDay;
    private int mMonth;
    private int mYear;
    private int mTheDate;
    private int i = 0;
    private int j = 0;

    public DatePopup(JTextField pText) {
        super(new JFrame(), "日期選擇", true);
        this.mText = pText;
        try {
            DatePopupInit();
            pack();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 控件的初始化方法。
     */
    private void DatePopupInit() {
        // 設置主窗口佈局
        Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());
        mPanel1.setLayout(new BorderLayout());
        mPanel1.setBorder(new TitledBorder(BorderFactory.createLineBorder(
                Color.white, 1), "日期選擇"));

        Calendar nowCalendar = Calendar.getInstance();
        this.mTheDate = nowCalendar.get(Calendar.DAY_OF_WEEK);
        this.mDay = nowCalendar.get(Calendar.DAY_OF_MONTH);
        this.mMonth = nowCalendar.get(Calendar.MONTH);
        this.mYear = nowCalendar.get(Calendar.YEAR);

        // 設置mPanel2
        JComboBox comboMonth = new JComboBox();
        comboMonth.setActionCommand("MonthSelect");
        for (i = 1; i <= 12; i++) {
            comboMonth.addItem(i + "月");
            if (i == (this.mMonth + 1)) {
                comboMonth.setSelectedItem(i + "月");
            }
        }
        comboMonth.addActionListener(this);
        JComboBox comboYear = new JComboBox();
        comboYear.setActionCommand("YearSelect");
        for (i = 1900; i <= 2050; i++) {
            comboYear.addItem(i + "年");
            if (i == this.mYear) {
                comboYear.setSelectedItem(i + "年");
            }
        }
        comboYear.addActionListener(this);
        mPanel2.setLayout(new FlowLayout());
        mPanel2.add(comboMonth);
        mPanel2.add(comboYear);
        mPanel1.add(mPanel2, BorderLayout.NORTH);

        // 設置mPanel3
        mPanel3.setLayout(new GridLayout(7, 7));
        mPanel3.add(new JLabel("日", SwingConstants.CENTER));
        mPanel3.add(new JLabel("一", SwingConstants.CENTER));
        mPanel3.add(new JLabel("二", SwingConstants.CENTER));
        mPanel3.add(new JLabel("三", SwingConstants.CENTER));
        mPanel3.add(new JLabel("四", SwingConstants.CENTER));
        mPanel3.add(new JLabel("五", SwingConstants.CENTER));
        mPanel3.add(new JLabel("六", SwingConstants.CENTER));
        Calendar calendar1 = Calendar.getInstance();
        calendar1.set(this.mYear, this.mMonth + 1, 1);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(this.mYear, this.mMonth, 1);
        int daysOfMonth;
        if (this.mMonth == 11) {
            daysOfMonth = 31;
        } else {
            daysOfMonth = calendar1.get(Calendar.DAY_OF_YEAR)
                    - calendar2.get(Calendar.DAY_OF_YEAR);
        }
        int firstDay = calendar2.get(Calendar.DAY_OF_WEEK);
        for (i = 1; i < 43; i++) {
            if (((i == firstDay) || (j != 0)) && (j < daysOfMonth)) {
                j++;
                mNewButton = new JButton((new String()).valueOf(j));
                if (j == this.mDay) {
                    mNewButton.setSelected(true);
                    mNewButton.setEnabled(false);
                    mNewButton.setBackground(new Color(84, 215, 4));
                }
                mNewButton.addActionListener(this);
                mPanel3.add(mNewButton);
            } else {
                mPanel3.add(new JLabel());
            }
        }
        mPanel1.add(mPanel3, BorderLayout.CENTER);

        // 設置mPanel4
        JButton confirmButton = new JButton("確定");
        confirmButton.setActionCommand("confirm");
        confirmButton.addActionListener(this);
        JButton cancelButton = new JButton("取消");
        cancelButton.setActionCommand("cancel");
        cancelButton.addActionListener(this);
        mPanel4.setLayout(new FlowLayout());
        mPanel4.add(confirmButton);
        mPanel4.add(cancelButton);

        // 設置contentpane
        contentPane.add(mPanel1, BorderLayout.CENTER);
        contentPane.add(mPanel4, BorderLayout.SOUTH);
    }

    /**
     * 監聽事件響應。
     */
    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        Object obj = e.getSource();
        String temp = "";
        if (cmd.equals("MonthSelect")) {
            JComboBox comMonth = (JComboBox) obj;
            temp = comMonth.getSelectedItem().toString();
            temp = temp.substring(0, temp.length() - 1);
            int tempMonth = Integer.parseInt(temp);
            this.mMonth = tempMonth - 1;
            mypaint();
        } else if (cmd.equals("YearSelect")) {
            JComboBox comYear = (JComboBox) obj;
            temp = comYear.getSelectedItem().toString();
            temp = temp.substring(0, 4);
            int tempYear = Integer.parseInt(temp);
            this.mYear = tempYear;
            mypaint();
        } else if (cmd.equals("confirm")) {
            String pFinalDate = "";
            if (this.mMonth < 9) {
                pFinalDate = this.mYear + "/0" + (this.mMonth + 1);
            } else {
                pFinalDate = this.mYear + "/" + (this.mMonth + 1);
            }
            if (this.mDay < 10) {
                pFinalDate = pFinalDate + "/0" + this.mDay;
            } else {
                pFinalDate = pFinalDate + "/" + this.mDay;
            }
            this.mText.setText(pFinalDate);
            this.dispose();
        } else if (cmd.equals("cancel")) {
            this.dispose();
        } else {
            int tempDay = Integer.parseInt(cmd);
            this.mDay = tempDay;
            mypaint();
            // System.out.println(cmd);
        }
    }

    /**
     * 控件重新佈局方法。
     */
    private void mypaint() {
        this.invalidate();
        mPanel3.removeAll();
        mPanel3.setLayout(new GridLayout(7, 7));
        mPanel3.add(new JLabel("日", SwingConstants.CENTER));
        mPanel3.add(new JLabel("一", SwingConstants.CENTER));
        mPanel3.add(new JLabel("二", SwingConstants.CENTER));
        mPanel3.add(new JLabel("三", SwingConstants.CENTER));
        mPanel3.add(new JLabel("四", SwingConstants.CENTER));
        mPanel3.add(new JLabel("五", SwingConstants.CENTER));
        mPanel3.add(new JLabel("六", SwingConstants.CENTER));
        Calendar calendar1 = Calendar.getInstance();
        calendar1.set(this.mYear, this.mMonth + 1, 1);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(this.mYear, this.mMonth, 1);
        int daysOfMonth;
        if (this.mMonth == 11) {
            daysOfMonth = 31;
        } else {
            daysOfMonth = calendar1.get(Calendar.DAY_OF_YEAR)
                    - calendar2.get(Calendar.DAY_OF_YEAR);
        }
        int firstDay = calendar2.get(Calendar.DAY_OF_WEEK);
        j = 0;
        for (i = 1; i < 43; i++) {
            if (((i == firstDay) || (j != 0)) && (j < daysOfMonth)) {
                j++;
                mNewButton = new JButton((new String()).valueOf(j));
                if (j == this.mDay) {
                    mNewButton.setSelected(true);
                    mNewButton.setEnabled(false);
                    mNewButton.setBackground(new Color(84, 215, 4));
                }
                mNewButton.addActionListener(this);
                mPanel3.add(mNewButton);
            } else {
                mPanel3.add(new JLabel());
            }
        }
        mPanel1.add(mPanel3, BorderLayout.CENTER);
        this.validate();
    }
   
    /**
     * 顯示日期視窗
     */
    public void showDialog(){
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setLocation((int)(screenSize.getWidth()-getWidth())/2,(int)(screenSize.getHeight()-getHeight())/2);
        setVisible(true);
    }

 

使用方法:

 

DatePopup DP = new DatePopup(TF_BornDate);
DP.showDialog();

 

TF_BornDate是一個JTextField元件 ,他會將取得到日期輸入到這裡面

arrow
arrow
    全站熱搜

    eric1300460 發表在 痞客邦 留言(0) 人氣()