package datechooser;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* 日期的选择控件,可以作为普通的组件使用,在构造函数中,必须传入一个该组件的所有者对象。
* 并且该对象只能是一个Frame对象或者一个JFrame对象。
* 使用方法如下:
* public class Test
{
public static void main(String[] args) {
JFrame f=new JFrame();
f.getContentPane().setLayout(new FlowLayout());
f.getContentPane().add(new DateChooser(f));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(600,500);
f.setVisible(true);}
}
*组件的外观象一个combox,单击下拉按钮就可以对日期进行选择。
* Title: 日期选择控件
* Copyright: Copyright (c) 2006
* Company: Xaccp
* Date:2006年6月17日
* @author Tellixu(许天岭)
* @version 1.0
*/
public class DateChooser
extends JPanel
{
private int width = 200; //日期控件的宽度
private int height = 220; //日期控件的高度
private GridBagLayout gridBagLayout1 = new GridBagLayout();
private JTextField dateField = new JTextField();
private DateChooserButton btnChoose = new DateChooserButton("\u25BC"); //\u25BC是指:▼下拉箭头的unicode码
private String parten;
private Container owner;
private int length=105;
public DateChooser(Container owner,int length) {
this.owner = owner;
this.parten = "yyyy-MM-dd";
this.length=length;
try {
init();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* 根据一个所有者和一个日期的显示格式构造一个DateChooser对象。
*/
public DateChooser(Container owner, String partten,int length) {
this.owner = owner;
this.parten = partten;
this.length=length;
try {
init();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* 根据一个所有者和一个日期的显示格式构造一个DateChooser对象。
*/
public DateChooser(Container owner, String partten) {
this.owner = owner;
this.parten = partten;
try {
init();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* 以缺省的partten构建DateChooser对象
* 日期选择框的所有者必须是Frame或者是JFrame对象。
*/
public DateChooser(Container owner) {
this.owner = owner;
this.parten = "yyyy-MM-dd";
try {
init();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* 系统初始化
* @throws Exception
*/
private void init() throws Exception {
dateField.setToolTipText("单击右边的按钮即可选择日期");
btnChoose.setToolTipText("单击即可选择日期");
this.setLayout(gridBagLayout1);
dateField.setEditable(false);
btnChoose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DateChooser.this.btnChoose_actionPerformed(e);
}
});
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(parten);
this.setText(simpleDateFormat.format(date));
this.add(dateField, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), this.length, 0));
this.add(btnChoose, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
}
public void setToolTipText(String text) {
dateField.setToolTipText(text);
btnChoose.setToolTipText(text);
}
/**
* 下拉按钮的事件处理
* @param e ActionEvent
*/
public void btnChoose_actionPerformed(ActionEvent e) {
java.awt.Rectangle r = dateField.getBounds();
Point pOnScreen = dateField.getLocationOnScreen();
//
Point result = new Point(pOnScreen.x, pOnScreen.y + r.height);
// Point powner = owner.getLocation();
// int offsetX = (pOnScreen.x + width) - (powner.x + owner.getWidth());
// int offsetY = (pOnScreen.y + r.height + height) - (powner.y + owner.getHeight());
//
// if (offsetX > 0) {
// result.x -= offsetX;
// }
//
// if (offsetY > 0) {
// result.y -= height + r.height;
// }
javax.swing.JDialog dateFrame = new javax.swing.JDialog();
dateFrame.setModal(false);
dateFrame.setUndecorated(true);
dateFrame.setLocation(result);
dateFrame.setSize(width, height);
dateFrame.addWindowListener(new WindowAdapter() {
//在任意的非日期选择区单击,则日期选择组件将变为非活动状态,自动释放资源。
public void windowDeactivated(WindowEvent e) {
javax.swing.JDialog f = (javax.swing.JDialog) e.getSource();
f.dispose();
}
});
DatePanel datePanel = new DatePanel(dateFrame, parten);
dateFrame.getContentPane().setLayout(new BorderLayout());
dateFrame.getContentPane().add(datePanel);
dateFrame.setVisible(true);
}
/**
* 得到日期控件中的值
* @return String
*/
public String getText() {
return this.dateField.getText();
}
/**
* 设置文本域的值
* @param text String
*/
public void setText(String text) {
this.dateField.setText(text);
}
/**
* 该方法非常有用,是外部直接访问的TextField对象。
* @return JTextField
*/
public JTextField getDateField() {
return dateField;
}
/**
* 内部类,日期选择控件的主体,封装了所有日期选择的内容,主要是一个Panel
*/
class DatePanel
extends JPanel implements MouseListener,
ChangeListener {
int startYear = 1970; //默认【最小】显示年份
int lastYear = 2050; //默认【最大】显示年份
Color backGroundColor = Color.gray; //底色
//月历表格配色----------------//
Color palletTableColor = Color.white; //日历表底色
Color weekFontColor = Color.blue; //星期文字色
Color dateFontColor = Color.black; //日期文字色
Color weekendFontColor = Color.red; //周末文字色
Color moveButtonColor = Color.GREEN; //鼠标移动的日历底色
Color todayBtnColor = Color.BLUE; //今天的日历底色
//控制条配色------------------//
Color controlLineColor = Color.pink; //控制条底色
Color controlTextColor = Color.white; //控制条标签文字色
在Java编程领域,日期控件(Date Picker)是经常用于用户界面中,允许用户选择日期的一种组件。在给定的标题“JAVA 史上最牛的日期控件”中,我们可以推断这是一个功能强大且历史跨度极大的日期选择器,它支持从1875年至2050年的日期范围。这表明该控件不仅具有标准的日期选择功能,可能还提供了高级特性,如年份滚动、月份导航等。 描述中提到“最牛逼的日期控件有Main方法”,这暗示着这是一个独立运行的程序,可能包含一个演示或者测试用例,用户可以直接通过运行`main`方法来体验和测试这个日期控件的功能。通常,Java类中包含`main`方法意味着它是可执行的,可以作为一个应用程序的入口点。 基于提供的标签“JAVA 日期控件”,我们可以进一步讨论Java中处理日期和时间的常见库,例如`java.util.Date`、`java.time`包(自Java 8引入)以及第三方库,如JCalendar或JDatePicker。这些库通常提供API来创建、格式化和操作日期,以及在图形用户界面中显示日期。 在压缩包子文件的文件名称列表中,我们看到"Record.java"和"datechooser"。Record.java很可能是一个包含日期控件实现的Java类,可能包含了控件的定义、事件处理以及与用户交互的逻辑。而"datechooser"可能是该日期控件的具体实现类或者是相关的资源文件,比如图片、样式表或配置文件。 在深入讨论Record.java之前,让我们先了解一下Java中常见的日期处理技术。`java.util.Date`是早期的日期类,但它存在一些设计上的缺陷,因此在Java 8中引入了`java.time`包,包括`LocalDate`、`LocalTime`、`LocalDateTime`等类,它们提供了更丰富的API和更好的时区处理。如果Record.java使用的是`java.time`,那么它可能会使用`TemporalAdjusters`来实现复杂的日期调整,或者使用`DateTimeFormatter`来格式化日期输出。 至于datechooser,如果是第三方库的一部分,它可能包含了自己的日期选择对话框,提供了定制的UI和交互方式。这类控件通常会提供事件监听器接口,允许开发者在用户选择日期时进行响应,例如保存或验证用户输入的日期。 在Record.java中,`main`方法可能是用来展示日期控件的简单应用,通过创建`datechooser`实例并将其添加到GUI中,然后启动事件循环,让用户可以与控件交互。它可能还包括对日期选择的示例处理,比如打印选定的日期到控制台,或者显示一个消息框。 总结来说,这个“史上最牛的日期控件”可能是一个功能强大的Java日期选择组件,它支持广泛的日期范围,并且拥有独立运行的演示程序,便于用户和开发者测试和评估其性能和功能。Record.java和datechooser这两个文件揭示了其内部实现和展示机制,是理解这个日期控件工作原理的关键。对于Java开发者而言,掌握这样的控件设计和实现有助于提高用户界面的交互性和用户体验。
































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 78
- 资源: 10
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- AI大模型Deepseek赋能企业数字化转型实践(ERP_SRM_WMS_MES_APS_EMS等系统举例).pptx
- 嵌入式物联网项目_微联智控开源工作室_1741164176.zip
- 物联网设备数据管理_HTTP接口集成_1741161790.zip
- 通信技术_VoIP即时消息私有部署服务端_1741164495.zip
- 基于Matlab相场模拟的热力耦合断裂问题研究-以陶瓷淬火算例为例,采用Paraview实现可视化分析,Matlab相场模型下的热力耦合断裂问题研究:陶瓷淬火算例及Paraview可视化应用,mat
- 物联网_EVM_嵌入式Vue_开发框架_1741165396.zip
- 工具变量-上市公司实质性创新和策略性创新数据集 (2000-2023年).txt
- 工业物联网数据采集网关技术_DataShark_1741164605.zip
- 两级式三相光伏并网发电系统Simulink仿真方法结合学习,《基于Simulink仿真的两级式三相光伏并网发电系统及其MPPT优化研究-整合参数设计与仿真学习》,两级式三相光伏并网发电系统simul
- 【未知机构-2025研报】深度推理驱动的Agent智能体构建研究.pdf
- ,基于STM32F1的线性自抗扰技术(LADRC)改进程序及LabVIEW程序实现,线性自抗扰(LADRC)的stm32f1在原有程序基础上修改后的,另送labview程序 ,LADRC; STM32
- postgresql数据类型转换PDF
- 基于扩展卡尔曼滤波算法EKF的锂电池SOC动态估算:考虑充放电倍率与环境温度的综合辨识,基于扩展卡尔曼滤波算法EKF的锂电池SOC动态估算:考虑充放电倍率与环境温度的综合辨识,扩展卡尔曼滤波soc估算
- 基于COMSOL模拟的脉冲抑制锂电池枝晶生长模型案例:多条件对比下的枝晶生长现象验证,基于COMSOL模拟的脉冲抑制锂电池枝晶生长模型案例:多条件对比下的枝晶生长现象验证,COMSOL脉冲抑制锂电池枝
- 编程语言_Golang_面试题合集_学习成长_1741356734.zip
- 计算机知识图书汇编_资源分享_1741356544.zip


