效果图:

简要说明:
一个视图类: HongYeLingGuDate
一个抽象接口: SelectHYDateAbstract
需要导入的jar包: http://download.csdn.net/detail/male09/9884835

中的 flowlayout_v.jar 文件

示例代码:

HongYeLingGuDate类

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.border.EmptyBorder;import com.changda.fingerservice.javaframe.VFlowLayout;import hong.yelinggu.date.absinterface.SelectHYDateAbstract;public class HongYeLingGuDate {private final JFrame frTime = new JFrame("请选择日期时间");private JPanel jPtimeWeek, jPtimeDay, year_form, ybJPanel, month_form, mbJPanel;private JButton btn_year_close, btn_month_close, btn_year_left, btn_year_right, btn_yes, btn_closed;private Box box;private JComboBox<String> jtf_H = null, jtf_m = null, jtf_s = null;private SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");private List<JButton> btnList = new ArrayList<>();private JButton yearStart, monthEnd;private String SelectNow_day = "01";private int yearPage = 1;// 年份的页码private final int yearGAP = 5;// 首页的年差private final int PAGE_MAIN = 0;private final int PAGE_YEAR = 1;private final int PAGE_MONTH = 2;private Calendar instance = Calendar.getInstance();private int now_year = 0;private int now_month = 0;private int now_day = 0;private int now_hous = 0;private int now_min = 0;private int now_ss = 0;private SelectHYDateAbstract HdateInterface;String returnDateFormat = null;/*** 实例化控件* * @param returnDateFormat*            返回的时间格式*/public HongYeLingGuDate(String returnFormat) {// TODO Auto-generated constructor stubreturnDateFormat = returnFormat;}/*** 创建时间拾取器*/public void creatDatePicker(SelectHYDateAbstract dateInterface) {// TODO Auto-generated method stub//判断如果时间控件是显示可见的就不执行了,防止多次执行if (frTime.isVisible()){return;}HdateInterface = dateInterface;Date dateTime = new java.util.Date();String StringTime = sdFormat.format(dateTime);instance.setTime(dateTime);String[] splDate = StringTime.split(" ");String dateAssemble = splDate[0];String timeAssemble = splDate[1];String[] splitItemDate = dateAssemble.split("-");// 日期String[] splitItemTime = timeAssemble.split(":");// 时间now_year = Integer.parseInt(splitItemDate[0]);now_month = Integer.parseInt(splitItemDate[1]);now_day = Integer.parseInt(splitItemDate[2]);now_hous = Integer.parseInt(splitItemTime[0]);now_min = Integer.parseInt(splitItemTime[1]);now_ss = Integer.parseInt(splitItemTime[2]);frTime.getContentPane().setLayout(new VFlowLayout());// 年,月,日选择入口区JPanel jPtimeTiele = new JPanel(new GridLayout(1, 3));yearStart = new JButton(now_year + "年", new ImageIcon("./src/down.png"));monthEnd = new JButton((now_month < 10 ? "0" + now_month : now_month) + "月", new ImageIcon("./src/down.png"));yearStart.setFocusable(false);yearStart.setBorderPainted(false);yearStart.setBackground(new Color(0, 161, 203));monthEnd.setFocusable(false);monthEnd.setBorderPainted(false);monthEnd.setBackground(new Color(0, 161, 203));jPtimeTiele.add(yearStart);JButton btn_null = new JButton("");btn_null.setBorderPainted(false);btn_null.setBackground(new Color(245, 245, 245));btn_null.setFocusable(false);jPtimeTiele.add(btn_null);jPtimeTiele.add(monthEnd);jPtimeTiele.setBackground(new Color(0, 161, 203));// 周期 显示区jPtimeWeek = new JPanel(new GridLayout(1, 7));jPtimeWeek.setBorder(new EmptyBorder(8, 0, 8, 0));jPtimeWeek.setBackground(new Color(245, 245, 245));String[] weekText = { "周日", "周一", "周二", "周三", "周四", "周五", "周六" };for (int i = 0; i < weekText.length; i++) {jPtimeWeek.add(new JLabel(weekText[i], SwingConstants.CENTER));}jPtimeDay = new JPanel(new GridLayout(6, 7));jPtimeDay.setBackground(Color.WHITE);// 日期选择入口UpdataDateList(null);JPanel jPtimeTime = new JPanel(new FlowLayout(FlowLayout.LEFT));String[] hous = new String[24];for (int i = 0; i < hous.length; i++) {hous[i] = i < 10 ? "0" + i : String.valueOf(i);}jtf_H = new JComboBox<>(hous);jtf_H.setSelectedIndex(now_hous);jtf_H.setPreferredSize(new Dimension(50, 25));String[] mins = new String[60];String[] ss = new String[60];for (int i = 0; i < mins.length; i++) {mins[i] = i < 10 ? "0" + i : String.valueOf(i);ss[i] = i < 10 ? "0" + i : String.valueOf(i);}jtf_m = new JComboBox<>(mins);jtf_m.setSelectedIndex(now_min);jtf_m.setPreferredSize(new Dimension(50, 25));jtf_s = new JComboBox<>(ss);jtf_s.setSelectedIndex(now_ss);jtf_s.setPreferredSize(new Dimension(50, 25));jPtimeTime.add(new JLabel("时"));jPtimeTime.add(jtf_H);jPtimeTime.add(new JLabel("分"));jPtimeTime.add(jtf_m);jPtimeTime.add(new JLabel("秒"));jPtimeTime.add(jtf_s);box = Box.createHorizontalBox();box.add(jPtimeTime);JPanel panel_r = new JPanel(new FlowLayout(FlowLayout.RIGHT));btn_closed = new JButton("关闭");btn_closed.setFocusable(false);btn_closed.setBorderPainted(false);btn_closed.setBackground(new Color(0, 161, 203));btn_yes = new JButton("确认");btn_yes.setBackground(new Color(0, 161, 203));btn_yes.setFocusable(false);btn_yes.setBorderPainted(false);panel_r.add(btn_closed);panel_r.add(btn_yes);box.add(panel_r);box.add(Box.createHorizontalGlue());box.add(panel_r);/** 关闭时间选择器*/btn_closed.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubfrTime.dispose();}});/** 确定选择的时间*/btn_yes.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {// TODO Auto-generated method stubStringBuffer sbfd = new StringBuffer();sbfd.append(yearStart.getText()).append(monthEnd.getText()).append(SelectNow_day).append(jtf_H.getSelectedItem()).append(jtf_m.getSelectedItem()).append(jtf_s.getSelectedItem());String selectT = sbfd.toString().replace("年", "").replace("月", "");if (HdateInterface != null) {if (returnDateFormat != null) {SimpleDateFormat nowFormat = new SimpleDateFormat("yyyyMMddHHmmss");SimpleDateFormat format = new SimpleDateFormat(returnDateFormat);Date parse = nowFormat.parse(selectT);selectT = format.format(parse);}HdateInterface.clickOnSwingToTime(selectT);}} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}frTime.dispose();}});frTime.add(jPtimeTiele);frTime.add(jPtimeWeek);frTime.add(jPtimeDay);frTime.add(box);/** 年份的浮层*/year_form = new JPanel(new GridLayout(5, 4));year_form.setBackground(Color.WHITE);final List<JButton> list_btn = new ArrayList<>();for (int i = now_year - yearGAP; i < now_year + 15; i++) {JButton btn_y = new JButton(i + "年");btn_y.setPreferredSize(new Dimension(45, 50));btn_y.setBackground(Color.WHITE);btn_y.setBorderPainted(false);btn_y.setFocusable(false);year_form.add(btn_y);list_btn.add(btn_y);btn_y.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubJButton ye = (JButton) e.getSource();for (JButton jButton : list_btn) {jButton.setBackground(Color.WHITE);}ye.setBackground(new Color(0, 161, 203));selectYearClick(ye.getText().trim());}});}/** 月份的浮层*/month_form = new JPanel(new GridLayout(3, 4));month_form.setBackground(Color.WHITE);final List<JButton> list_month_btn = new ArrayList<>();for (int i = 1; i <= 12; i++) {JButton btn_y = new JButton((i < 10 ? "0" + i : i) + "月");btn_y.setPreferredSize(new Dimension(50, 80));btn_y.setBackground(Color.WHITE);btn_y.setBorderPainted(false);btn_y.setFocusable(false);month_form.add(btn_y);list_month_btn.add(btn_y);btn_y.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubJButton ye = (JButton) e.getSource();for (JButton jButton : list_month_btn) {jButton.setBackground(Color.WHITE);}ye.setBackground(new Color(0, 161, 203));monthEnd.setText(ye.getText().trim());showhidle(PAGE_MAIN, true);}});}year_form.setVisible(false);month_form.setVisible(false);ybJPanel = new JPanel();mbJPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));btn_year_close = new JButton("关闭");btn_year_left = new JButton("上一页");btn_year_right = new JButton("下一页");btn_year_left.setPreferredSize(new Dimension(110, 30));btn_year_right.setPreferredSize(new Dimension(110, 30));btn_year_close.setPreferredSize(new Dimension(80, 30));btn_month_close = new JButton("关闭");ybJPanel.add(btn_year_left);ybJPanel.add(btn_year_right);JLabel jLabel_null = new JLabel("");jLabel_null.setPreferredSize(new Dimension(93, 22));ybJPanel.add(jLabel_null);ybJPanel.add(btn_year_close);mbJPanel.add(btn_month_close);ybJPanel.setVisible(false);mbJPanel.setVisible(false);frTime.add(year_form);frTime.add(month_form);frTime.add(ybJPanel);frTime.add(mbJPanel);frTime.pack();frTime.setSize(new Dimension(430, 370));frTime.setLocationRelativeTo(null);frTime.setResizable(false);frTime.setVisible(true);frTime.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);// 只关闭子窗口/** 选择年份*/yearStart.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubshowhidle(PAGE_YEAR, true);}});/** 年份上一页*/btn_year_left.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubif (yearPage > 1) {year_form.removeAll();int startYest;int nowGap = now_year - yearGAP;startYest = nowGap + ((yearPage - 2) * 20);final List<JButton> list_btn = new ArrayList<>();for (int i = startYest; i < startYest + 20; i++) {JButton btn_y = new JButton(i + "年");btn_y.setPreferredSize(new Dimension(45, 50));btn_y.setBackground(Color.WHITE);btn_y.setBorderPainted(false);btn_y.setFocusable(false);year_form.add(btn_y);list_btn.add(btn_y);btn_y.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubJButton ye = (JButton) e.getSource();for (JButton jButton : list_btn) {jButton.setBackground(Color.WHITE);}ye.setBackground(new Color(0, 161, 203));selectYearClick(ye.getText().trim());}});year_form.updateUI();}yearPage--;}}});/** 年份下一页*/btn_year_right.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubyear_form.removeAll();int startYest;int nowGap = now_year - yearGAP;startYest = nowGap + (yearPage * 20);final List<JButton> list_btn = new ArrayList<>();for (int i = startYest; i < startYest + 20; i++) {JButton btn_y = new JButton(i + "年");btn_y.setPreferredSize(new Dimension(45, 50));btn_y.setBackground(Color.WHITE);btn_y.setBorderPainted(false);btn_y.setFocusable(false);year_form.add(btn_y);list_btn.add(btn_y);btn_y.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubJButton ye = (JButton) e.getSource();for (JButton jButton : list_btn) {jButton.setBackground(Color.WHITE);}ye.setBackground(new Color(0, 161, 203));selectYearClick(ye.getText().trim());}});year_form.updateUI();}yearPage++;}});/** 选择月份*/monthEnd.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubshowhidle(PAGE_MONTH, true);}});/*** 年份单个选择完毕*/btn_year_close.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubshowhidle(PAGE_MAIN, true);}});/*** 月份单个选择完毕*/btn_month_close.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubshowhidle(PAGE_MAIN, true);}});}/**更新时间的天数* @param data*            时间格式: 年-月*/private void UpdataDateList(String data) {try {if (data != null) {Date parse = sdFormat.parse(data);instance.setTime(parse);btnList.clear();jPtimeDay.removeAll();}instance.set(Calendar.DAY_OF_MONTH, 1);int week_mo = instance.get(Calendar.DAY_OF_WEEK);int maximum = instance.getActualMaximum(Calendar.DAY_OF_MONTH);for (int i = 1; i <= 42; i++) {String btnNum = "";int monthDay = 0;if (i >= week_mo && i < maximum + week_mo) {monthDay = i - week_mo + 1;btnNum = String.valueOf(monthDay < 10 ? "0" + monthDay : monthDay);}JButton btnDay = new JButton(btnNum);btnDay.setPreferredSize(new Dimension(30, 35));btnDay.setBorderPainted(false);if (now_day == monthDay) {btnDay.setBackground(new Color(0, 161, 203));btnDay.setForeground(Color.WHITE);SelectNow_day = btnNum;} else {btnDay.setBackground(Color.WHITE);}btnDay.setFocusable(false);btnDay.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubJButton source = (JButton) e.getSource();SelectNow_day = source.getText().toString();if (!source.getText().isEmpty()) {for (JButton itembtn : btnList) {itembtn.setBackground(Color.WHITE);itembtn.setForeground(Color.BLACK);}source.setBackground(new Color(0, 161, 203));source.setForeground(Color.WHITE);}}});btnList.add(btnDay);jPtimeDay.add(btnDay);}if (data != null) {jPtimeDay.updateUI();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** 选择的年份的事件*/private void selectYearClick(String year) {yearStart.setText(year);showhidle(PAGE_MAIN, true);}/*** 显示隐藏切换* * @param page*            页面* @param showpage*            是否显示*/private void showhidle(int page, boolean showpage) {switch (page) {case PAGE_MAIN:// 主页jPtimeWeek.setVisible(showpage);jPtimeDay.setVisible(showpage);box.setVisible(showpage);year_form.setVisible(!showpage);ybJPanel.setVisible(!showpage);String yeatText = yearStart.getText().trim().replace("年", "");String monthText = monthEnd.getText().trim().replace("月", "");UpdataDateList(yeatText + "-" + monthText + "-01 00:00:00");break;case PAGE_YEAR:year_form.setVisible(showpage);ybJPanel.setVisible(showpage);jPtimeWeek.setVisible(!showpage);jPtimeDay.setVisible(!showpage);box.setVisible(!showpage);month_form.setVisible(!showpage);mbJPanel.setVisible(!showpage);break;case PAGE_MONTH:jPtimeWeek.setVisible(!showpage);jPtimeDay.setVisible(!showpage);box.setVisible(!showpage);year_form.setVisible(!showpage);ybJPanel.setVisible(!showpage);month_form.setVisible(showpage);mbJPanel.setVisible(showpage);default:break;}}
}

抽象类 : SelectHYDateAbstract
public abstract interface SelectHYDateAbstract {

/*** 选择的时间的回电方法* @param selectTime*/

void clickOnSwingToTime(String selectTime);
}

类测试方法:

    //返回的数据格式private static String s = "yyyy-MM-dd HH:mm:ss";public static void main(String[] args) {HongYeLingGuDate guDate = new HongYeLingGuDate(s);guDate.creatDatePicker(new SelectHYDateAbstract() {@Overridepublic void clickOnSwingToTime(String time) {// TODO Auto-generated method stubSystem.out.println("你选择的日期是="+time);}});}

选择后的测试结果:
你选择的日期是=2017-06-30 10:43:19

实用例子下载 : http://download.csdn.net/detail/male09/9884835

java Swing 时间选择器控件相关推荐

  1. html小时分钟秒选择器,HTMLbootstrap时间选择器控件精确到秒 datetimepicker控件怎么精确到秒?...

    在使用 HTML 中的 bootstrap datetimepicker 选择器控件时会发现,该插件不能精确到秒钟,那么 bootstrap 时间选择器控件精确到秒能否实现呢? 其实可以进行简单的修改 ...

  2. 【iOS 开发】时间选择器控件 UIDatePicker

    目录 iOS 时间选择器控件 UIDatePicker 1. UIDatePicker 计时器模式 2. UIDatePicker 日期时间模式 附 Github 源码: iOS 时间选择器控件 UI ...

  3. 时间选择器控件默认时间自定义

    需求:界面2个控件 :开始时间选择控件 ,  结束时间选择控件,用于时间段的查询.开始时间选择控件默认时间为当前时间往前推1天,即昨天.结束时间选择控件默认时间是当前时间. 开始时间选择器默认时间设定 ...

  4. vue【element ui】el-date-picker 日期选择器控件 限制可选的开始时间和结束时间

    项目场景: 总结一下日期控件实现开始日期.结束日期的选择范围限制,以便更符合实际情况. 需求: 1.开始时间和结束时间都不能选当前日期之后的时间.(当前时间:2022年5月16日) 2.先选开始时间的 ...

  5. java 选择 颜色的控件_JavaFX颜色选择器(ColorPicker)

    颜色选择器控件允许用户从可用的颜色范围中选择颜色,或通过指定RGB或HSB组合设置其他颜色.JavaFX ColorPicker控件具有颜色选择器,调色板和自定义颜色对话框窗口. 创建ColorPic ...

  6. layui时间怎么设置年月日时分秒_layui-laydate时间日历控件使用方法详解

    本文实例为大家分享了laydate时间日历控件的使用方法,供大家参考,具体内容如下 此控件可使用layui或者独立版的layDate,两者初始化有些不同 在 layui 模块中使用layui.code ...

  7. 日期DatePicker与时间TimePicker控件

    在AndroidApp应用中,设置日期和时间时间也是经常遇见的,下面我们一起学习一下. 我们需要学习Android中的基本控件:(1)日期选择控件DatePicker (2)时间选择控件TimePic ...

  8. 老猪带你玩转自定义控件三——sai大神带我实现ios 8 时间滚轮控件

    ios 8 的时间滚轮控件实现了扁平化,带来很好用户体验,android没有现成控件,小弟不才,数学与算法知识不过关,顾十分苦恼,幸好在github上找到sai大神实现代码,甚为欣喜,顾把学习这个控件 ...

  9. Java Swing –日期选择器对话框

    房子里有Swing开发人员吗? 对于使用Swing的用户来说,这是一个GUI组件,可能会对您的UI编码工作有所帮助. 我们的JCG合作伙伴之一提供了日期选择器小部件. 一探究竟: Java Swing ...

最新文章

  1. Flutter开发之HTTP网络请求:dio库(28)
  2. linux date英文时间,date(时间),timedatectl(时区),cal(日历)的用法
  3. UA MATH564 概率论 高阶矩的计算:有限差算子方法1
  4. android布局翻译,android – 使用翻译动画将视图从一个布局转换为另一个布局
  5. 《刺杀小说家》读后感
  6. QUIC实战(二) AWS 搭建nginx(http3.0) + upsync + consul(server-client模式) 集群
  7. Taro+react开发(78):taro生命周期render
  8. 小米全球第二,雷军签发内部嘉奖令;亚马逊被欧盟处以创纪录的8.88亿美元罚款;​PyCharm 2021.2 发布|极客日报...
  9. PAT1087 All Roads Lead to Rome (30)(最短路径+dfs+回溯)
  10. 一生温暖纯良,不舍爱与自由
  11. php session auto_start,PHP出现 Warning: session_start()的解决方法
  12. eclipse上windowsbuilder 安装
  13. PC端答题小助手软件 – 用 OCR 高效完成在线答题
  14. 如何从网页上下载页面嵌入的PDF文件
  15. 029 大数据之即席查询PrestoKylin
  16. Java中Object转化为int类型
  17. 冷藏温度范围_冷藏和冷冻的温度标准
  18. 搞金融不能用mysql_金融行业数据库何去何从
  19. (附源码)springboot应用支撑平台和应用系统 毕业设计 984655
  20. Cesium量算-贴地形距离

热门文章

  1. 博科思:大数据时代,呼叫中心已进入发展黄金期!
  2. 岗位内推 | 小红书商业广告部门招聘广告算法、广告系统开发工程师
  3. 移动端html5用什么软件开发,基于uniapp的移动端和web-h5技术开发的移动端区别与应用...
  4. MySQL(3)-子查询、连接、运算符及函数
  5. 文件一直处于修改状态 git checkout 无法还原的问题解决方法
  6. COCOS2dX - 集成PayPa
  7. 嵌入式Linux LED小灯点亮实验
  8. 2020年TI杯大学生电子设计大赛 无线运动传感器节点 作品开源( PCB、设备/服务器工程、文档、测试视频、设计报告)
  9. xcode中xib使用之轻松学习
  10. windows服务器知多少