Swing实现日期选择器datepicker(带时分秒选择功能)

这个博客介绍了一个使用Java Swing编写的日期时间选择器组件`DateSelector`。这个组件不仅可以选择日期,还可以选择时、分、秒。它包含一个`DateChooser`对话框,用户可以在这里设置年、月、日、小时、分钟和秒。通过点击按钮,用户可以从当前时间开始调整所需的时间。博客还提供了一个`Test`类来展示如何在应用中使用`DateSelector`。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DateSelector.java


package Test;


import java.util.Date;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.awt.Color;
import java.awt.Font;
import java.awt.Point;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Frame;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; //import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JSpinner;
import javax.swing.JSpinner.NumberEditor;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.border.LineBorder;


public class DateSelector extends JButton {


    private DateChooser dateChooser = null;


    private String preLabel = "";


    public DateSelector() {
        this(getNowDate());
    }


    public DateSelector(SimpleDateFormat df, String dateString) {
        this();
        setText(df, dateString);
    }


    public DateSelector(Date date) {
        this("", date);
    }


    public DateSelector(String preLabel, Date date) {
        if (preLabel != null)
            this.preLabel = preLabel;
        setDate(date);
        setBorder(null);
        setCursor(new Cursor(Cursor.HAND_CURSOR));
        super.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (dateChooser == null)
                    dateChooser = new DateChooser();
                Point p = getLocationOnScreen();
                p.y = p.y + 30;
                dateChooser.showDateChooser(p);
            }
        });
    }


    private static Date getNowDate() {
        return Calendar.getInstance().getTime();
    }


    private static SimpleDateFormat getDefaultDateFormat() {
        return new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");
    }


    public void setText(String s) {
        Date date;
        try {
            date = getDefaultDateFormat().parse(s);
        } catch (ParseException e) {
            date = getNowDate();
        }
        setDate(date);
    }


    public void setText(SimpleDateFormat df, String s) {
        Date date;
        try {
            date = df.parse(s);
        } catch (ParseException e) {
            date = getNowDate();
        }
        setDate(date);
    }


    public void setDate(Date date) {
        super.setText(preLabel + getDefaultDateFormat().format(date));
    }


    public Date getDate() {
        String dateString = getText().substring(preLabel.length());
        try {
            return getDefaultDateFormat().parse(dateString);
        } catch (ParseException e) {
            return getNowDate();
        }


    }


    // 覆盖父类的方法使之无效
    public void addActionListener(ActionListener listener) {
    }


    private class DateChooser extends JPanel implements ActionListener,
            ChangeListener {
        int startYear = 1980; // 默认【最小】显示年份
        int lastYear = 2050; // 默认【最大】显示年份
        int width = 200; // 界面宽度
        int height = 200; // 界面高度


        Color backGro

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值