/**
* chega
* 2011-9-21上午11:06:41
*/
public class CalendarUI extends MouseAdapter implements ActionListener,ItemListener{
private JDialog dialog ;
private JComboBox jcb_year;
private JComboBox jcb_month;
private JComboBox jcb_hour;
private JComboBox jcb_min;
private JComboBox jcb_second;
private Vector<Integer> vec_year;
private Vector<Integer> vec_month;
private Vector<Integer> vec_hour;
private Vector<Integer> vec_min;
private Vector<Integer> vec_second;
private Vector<String> displayName;
private Calendar today;
private Calendar current;
private JButton jb_today;
private JButton jb_clear;
private JButton jb_ok;
private JPanel panel_date ;
private JTextField jtf_datetime;
private JButton jb_ellipsis;
private SimpleDateFormat sdf;
private Color bgColor;
private Color selectedColor;
private JPanel calenarPanel;
public static void main(String...args){
JFrame frame = new JFrame("CalendarUI Test");
frame.getContentPane().setLayout(null);
CalendarUI ui = new CalendarUI();
ui.setSdf("yyyy-MM-dd HH:mm");
JPanel panel = ui.getInstance();
panel.setBounds(new Rectangle(10,20,150,25));
frame.getContentPane().add(panel);
frame.setVisible(true);
frame.setBounds(new Rectangle(215,20,300,200));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public CalendarUI(){
initData();
}
/**
* 150*25
* @return JPanel
*/
public JPanel getInstance(){
calenarPanel = new JPanel();
calenarPanel.setLayout(null);
this.jb_ellipsis = new JButton("...");
this.jb_ellipsis.setHorizontalTextPosition(SwingConstants.LEADING);
this.jb_ellipsis.addActionListener(this);
this.jtf_datetime = new JTextField(20);
this.jtf_datetime.setEditable(false);
this.jtf_datetime.setBounds(new Rectangle(0,0,128,25));
calenarPanel.add(this.jtf_datetime);
this.jb_ellipsis.setBounds(new Rectangle(130,0,20,25));
calenarPanel.add(this.jb_ellipsis);
return calenarPanel;
}
private void initCalendar(){
this.panel_date = new JPanel();
this.dialog = new JDialog(this.getParentFrame(this.jb_ellipsis),true);
dialog.setTitle("\u65E5\u671F\u9009\u62E9\u5668");
Container container = dialog.getContentPane();
container.setLayout(null);
JPanel panel_time = this.initTimeComp();
panel_time.setBounds(new Rectangle(0, 0, 286, 64));
container.add(panel_time);
JPanel panel_date = this.initDateComp();
panel_date.setBounds(new Rectangle(0, 65, 280, 152));
container.add(panel_date);
JPanel panel_btn = this.initBtnComp();
panel_btn.setBounds(new Rectangle(0, 227, 286, 30));
container.add(panel_btn);
dialog.setSize(new Dimension(299, 288));
dialog.setVisible(false);
dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
}
private void restoreDateTime(){
this.jcb_year.setSelectedItem(this.current.get(Calendar.YEAR));
this.jcb_month.setSelectedItem(this.current.get(Calendar.MONTH)+1);
this.jcb_hour.setSelectedItem(this.current.get(Calendar.HOUR_OF_DAY));
this.jcb_min.setSelectedItem(this.current.get(Calendar.MINUTE));
this.jcb_second.setSelectedItem(this.current.get(Calendar.SECOND));
Component[] comps = this.panel_date.getComponents();
for(int i=0;i<comps.length;i++){
if(comps[i] instanceof JButton && (this.current.get(Calendar.DATE)+"").equals(((JButton)comps[i]).getText())){
((JButton)comps[i]).setBackground(this.selectedColor);
}
}
}
private JPanel initTimeComp(){
JPanel panel_time = new JPanel();
this.jcb_year = new JComboBox(this.vec_year);
this.jcb_year.addItemListener(this);
JLabel label_year = new JLabel("年");
this.jcb_month = new JComboBox(this.vec_month);
this.jcb_month.addItemListener(this);
JLabel label_month = new JLabel("月");
this.jcb_hour = new JComboBox(this.vec_hour);
this.jcb_hour.addItemListener(this);
JLabel label_hour = new JLabel("时");
this.jcb_min = new JComboBox(this.vec_min);
this.jcb_min.addItemListener(this);
JLabel label_min = new JLabel("分");
this.jcb_second = new JComboBox(this.vec_second);
this.jcb_second.addItemListener(this);
JLabel label_second = new JLabel("秒");
panel_time.setLayout(null);
this.jcb_year.setBounds(new Rectangle(44, 5, 60, 21));
panel_time.add(this.jcb_year);
label_year.setBounds(new Rectangle(114, 5, 20, 21));
panel_time.add(label_year);
this.jcb_month.setBounds(new Rectangle(144, 5, 60, 21));
panel_time.add(this.jcb_month);
label_month.setBounds(new Rectangle(214, 5, 20, 21));
panel_time.add(label_month);
this.jcb_hour.setBounds(new Rectangle(20, 36, 60, 21));
panel_time.add(this.jcb_hour);
label_hour.setBounds(new Rectangle(90, 36, 20, 21));
panel_time.add(label_hour);
this.jcb_min.setBounds(new Rectangle(114, 36, 60, 21));
panel_time.add(this.jcb_min);
label_min.setBounds(new Rectangle(184, 36, 20, 21));
panel_time.add(label_min);
this.jcb_second.setBounds(new Rectangle(201, 36, 60, 21));
panel_time.add(this.jcb_second);
label_second.setBounds(new Rectangle(271, 36, 20, 21));
panel_time.add(label_second);
return panel_time;
}
private JPanel initDateComp(){
this.panel_date.removeAll();
Calendar firstDayOfThisMonth = (Calendar) this.current.clone();
firstDayOfThisMonth.set(Calendar.DATE, 1);
//System.out.println(firstDayOfThisMonth.get(Calendar.DAY_OF_WEEK));
Calendar lastDayOfThisMonth = (Calendar) this.current.clone();
lastDayOfThisMonth.set(Calendar.DATE, lastDayOfThisMonth.getActualMaximum(Calendar.DATE));
int firstLineCount = this.displayName.size()-firstDayOfThisMonth.get(Calendar.DAY_OF_WEEK)+1;
int lastLineCount = lastDayOfThisMonth.get(Calendar.DAY_OF_WEEK);
int rowCount = (this.current.getActualMaximum(Calendar.DATE)-firstLineCount-lastLineCount)/7+3;
panel_date.setLayout(new GridLayout(rowCount,this.displayName.size(),5,5));
// System.out.println("第一行占用:"+firstLineCount+",最后一行占用:"+lastLineCount);
// System.out.println("行数:"+rowCount);
//星期字段行
for(int i=0;i<this.displayName.size();i++){
JLabel label = new JLabel(this.displayName.get(i));
label.setHorizontalAlignment(JLabel.CENTER);
if(i==0 || i==this.displayName.size()-1){
label.setForeground(Color.red);
}
panel_date.add(label);
}
for(int i=1;i<=(rowCount-1)*this.displayName.size();i++){
if(i<(this.displayName.size()-firstLineCount+1) || i>(this.current.getActualMaximum(Calendar.DATE)+this.displayName.size()-firstLineCount)){
panel_date.add(new JLabel());
}else{
JButton btn = new JButton(""+(i-(this.displayName.size()-firstLineCount)));
btn.setBorder(null);
btn.addMouseListener(this);
btn.setBackground(this.bgColor);
if(i%this.displayName.size()==0 || i%this.displayName.size()==1){
btn.setForeground(Color.red);
}
panel_date.add(btn);
}
}
//this.panel_date.repaint();
this.panel_date.validate();
return panel_date;
}
private JPanel initBtnComp(){
JPanel panel_btn = new JPanel();
this.jb_clear = new JButton("清空");
//this.jb_clear.setMargin(new Insets(5,5,5,5));
this.jb_clear.setBounds(26, 0, 60, 25);
this.jb_clear.addActionListener(this);
this.jb_today = new JButton("今天");
jb_today.setBounds(120, 0, 60, 25);
this.jb_today.addActionListener(this);
this.jb_ok = new JButton("选择");
jb_ok.setBounds(203, 0, 60, 25);
this.jb_ok.addActionListener(this);
panel_btn.setLayout(null);
panel_btn.add(this.jb_clear);
panel_btn.add(this.jb_today);
panel_btn.add(this.jb_ok);
return panel_btn;
}
private void initData(){
this.bgColor = new Color(240,240,240);
this.selectedColor = new Color(200,250,200);
this.sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
this.vec_year = new Vector<Integer>();
for(int i=1972;i<2099;i++){
this.vec_year.add(i);
}
this.vec_month = new Vector<Integer>();
for(int i=1;i<13;i++){
this.vec_month.add(i);
}
this.vec_hour = new Vector<Integer>();
for(int i=0;i<24;i++){
this.vec_hour.add(i);
}
this.vec_min = new Vector<Integer>();
for(int i=0;i<60;i++){
this.vec_min.add(i);
}
this.vec_second = new Vector<Integer>();
for(int i=0;i<60;i++){
this.vec_second.add(i);
}
this.displayName = new Vector<String>();
this.displayName.add("日");
this.displayName.add("一");
this.displayName.add("二");
this.displayName.add("三");
this.displayName.add("四");
this.displayName.add("五");
this.displayName.add("六");
this.today = Calendar.getInstance();
this.current = Calendar.getInstance();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==this.jb_ellipsis){
this.today = Calendar.getInstance();
this.initCalendar();
if(!this.jtf_datetime.getText().equals("")){
try {
this.current.setTime(this.sdf.parse(this.jtf_datetime.getText()));
} catch (ParseException e1) {
e1.printStackTrace();
}
}
this.restoreDateTime();
this.dialog.setLocation(new Point(this.jb_ellipsis.getLocationOnScreen().x-100,this.jb_ellipsis.getLocationOnScreen().y+20));
this.dialog.setVisible(true);
}
if(e.getSource()==this.jb_clear){
this.jtf_datetime.setText("");
this.dialog.setVisible(false);
}
if(e.getSource()==this.jb_today){
System.out.println(this.sdf.format(this.today.getTime()));
this.jtf_datetime.setText(this.sdf.format(this.today.getTime()));
this.dialog.setVisible(false);
}
if(e.getSource()==this.jb_ok){
this.jtf_datetime.setText(this.sdf.format(this.current.getTime()));
this.dialog.setVisible(false);
}
}
/*
* (non-Javadoc)
* @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
* 鼠标点击选择日期背景变成蓝色
*/
@Override
public void mouseClicked(MouseEvent e){
int date = Integer.parseInt(((JButton)e.getSource()).getText());
this.current.set(Calendar.DATE, date);
// System.out.println(sdf.format(this.current.getTime()));
if(e.getClickCount()==2){
this.jtf_datetime.setText(this.sdf.format(this.current.getTime()));
this.dialog.setVisible(false);
}
Component[] comps = this.panel_date.getComponents();
for(int i=0;i<comps.length ;i++){
if(comps[i] instanceof JButton){
comps[i].setBackground(this.bgColor);
}
}
if(e.getSource() instanceof JButton){
((JButton)e.getSource()).setBackground(this.selectedColor);
}
}
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){
if(e.getSource()==this.jcb_year){
this.current.set(Calendar.YEAR, (Integer)this.jcb_year.getSelectedItem());
this.initDateComp();
}
if(e.getSource()==this.jcb_month){
this.current.set(Calendar.MONTH, (Integer)this.jcb_month.getSelectedItem()-1);
this.initDateComp();
}
if(e.getSource()==this.jcb_hour){
this.current.set(Calendar.HOUR_OF_DAY,(Integer)this.jcb_hour.getSelectedItem());
}
if(e.getSource()==this.jcb_min){
this.current.set(Calendar.MINUTE, (Integer)this.jcb_min.getSelectedItem());
}
if(e.getSource()==this.jcb_second){
this.current.set(Calendar.SECOND, (Integer)this.jcb_second.getSelectedItem());
}
}
}
private JFrame getParentFrame(Component comp){
while(true){
// System.out.println(comp);
if(comp instanceof JFrame){
//System.out.println("instance");
return (JFrame)comp;
}
if(comp==null){
return (JFrame)null;
}
comp = comp.getParent();
}
}
/*
* 得到日期时间
*/
public String getDateTime(){
return this.jtf_datetime.getText();
}
/*
* 设置日期时间
*/
public void setDateTime(String dateTime){
try{
this.sdf.format(dateTime);
}catch(IllegalArgumentException e){
IllegalArgumentException ee = new IllegalArgumentException("如果赋值的日期时间格式不是默认的yyyy-MM-dd HH:mi:ss格式,请先设置格式后再赋值",e.getCause());
throw ee;
}
this.jtf_datetime.setText(dateTime);
}
/*
* 设置日期时间的格式 默认格式是yyyy-MM-dd HH:mi:ss
* if the defined format is uncorrect, an IllegalArgumentException will be thrown
*/
public CalendarUI setSdf(String format){
this.sdf = new SimpleDateFormat(format);
return this;
}
/*
* 设置日期时间的格式 默认格式是yyyy-MM-dd HH:mi:ss
* if the defined format is uncorrect, an IllegalArgumentException will be thrown
*/
public CalendarUI setSdf(SimpleDateFormat format){
this.sdf = format;
return this;
}
}
- 大小: 35.3 KB
分享到:
相关推荐
Swing扩展组件是Java Swing库中的一个重要组成部分,它提供了丰富的用户界面元素,使得开发者能够创建出功能强大且具有吸引力的图形用户界面(GUI)。Swing是Java AWT(抽象窗口工具包)的一个替代品,提供了更多的...
在Swing中,DatePicker是一个非常有用的组件,允许用户选择日期。这个压缩包包含了使用DatePicker组件的示例项目以及相关的jar包,帮助我们了解如何在Swing应用中集成和操作这个日期选择器。 DatePicker组件在Swing...
Swing提供了JCalendar和JDatePicker这两个常用的日期选择组件,它们使得用户能够方便地在日历视图中选择日期,或者通过一个文本框和下拉小部件选择日期和时间。 1. **JCalendar**: 这是一个第三方组件,通常由`...
在Swing中,开发人员可以使用各种组件来创建用户界面,其中包括日期和时间选择器组件。这个主题主要关注的是`DateChooser`,一个允许用户选择日期和时间的控件,通常用在需要用户输入日期或时间的应用场景。 `...
`datepicker.jar` 文件很可能就是一个包含DatePicker组件的第三方库,它可能包含了预定义的DatePicker类和相关方法,以便开发者在Swing应用中轻松集成日期选择功能。为了使用这个库,你需要将其添加到项目的类路径中...
在这个特定的资源中,我们关注的是一个经过二次封装的日期组件,用于改进原始的日期选择功能。 标题提到的"Swing 日期控件"是指在Swing应用中用来显示和选择日期的可视化组件。Swing本身并不直接提供一个内置的日期...
在Java Swing中,日期选择控件(DatePicker)是用于用户交互,方便他们选择特定日期的组件。Swing本身并没有内置的DatePicker控件,但开发者通常会利用第三方库来实现这一功能。这里提到的"swing 日期选择控件"很...
`doc.doc` 文件则可能是一个关于如何使用这个 `DatePicker.jar` 组件的文档,包括如何在你的 Swing 应用程序中导入、实例化日期控件,以及如何设置和获取日期,还有可能涉及事件监听、格式化日期显示、国际化支持等...
在Swing中,日历组件对于处理日期选择和显示是非常有用的。以下将详细讲解四种不同的Java Swing日历组件及其应用。 1. **单击文本框弹出日历组件选择日期** 这种方式通常通过结合`JTextField`和自定义的日历对话框...
在Swing中,DatePicker组件是一个方便的工具,允许用户选择日期,通常用于需要输入日期的表单或界面中。这个压缩包包含了关于如何在Java Swing应用中使用DatePicker组件的示例项目和相关的jar包。 DatePicker组件在...
在Swing中,日期选择通常通过`javax.swing.JDatePicker`组件来实现,它提供了用户友好的界面,允许用户方便地选择日期。`DatePicker`组件并不是Swing的标准组件,但可以通过第三方库如JCalendar来获取。 `...
总结,`JAVA SWING 日期控件`是一个自定义的组件,用于提供日期选择功能,并具有可扩展性,适用于多种Swing组件。通过阅读并理解DateChooser.java的源码,开发者不仅可以学习到如何创建自定义Swing控件,还能了解到...
2. **表单组件**:JIDE Forms包含了一组高级的表单组件,如日期选择器、滑块、颜色选择器等,以及布局管理器,帮助开发者构建美观且响应迅速的表单。 3. **菜单和工具栏**:JIDE提供了一套完整的菜单和工具栏组件,...
综上所述,Java Swing 提供了多种日期选择组件,如`JDatePicker` 和 `JDateChooser`,结合`DefaultDateModel` 和日期格式化工具,能够创建功能丰富的日期输入界面。开发者可以根据项目需求选择适合的控件,并通过...
Swing提供了一系列组件,如按钮、文本框、菜单等,用于构建用户界面。在处理日期和时间选择时,Swing虽然没有内置的日期选择器,但可以通过第三方库来实现,例如"JDateField.jar"就是这样一个专门用于日期输入的控件...
在Java Swing库中,DatePicker是一个常用的用户界面组件,它允许用户选择日期。Swing本身并不直接提供一个标准的DatePicker组件,但可以通过第三方库或者自定义组件实现。在本篇文章中,我们将深入探讨如何在Java ...
一个简单的Java Swing时间日期选择控件的代码示例,带有中文注释 代码创建了一个简单的Java Swing时间日期选择器,包含一个输入框、一...该代码使用了Java Swing库中的组件和事件处理机制来实现时间日期选择器的功能。
接下来是JDatePicker,这是Java Swing中的另一个日期选择组件。它比JCalendar更简单,通常只显示一个日期输入字段和一个下拉的日历图标。用户点击图标时,会弹出一个小的日历窗口供用户选择日期。JDatePicker可以...
在处理日期选择时,Swing虽然提供了基本的组件,如JComboBox,但有时这些组件可能不够便捷,特别是在需要用户输入日期时。这就是"Swing 日期插件"发挥作用的地方。 这个日期插件是为了简化Swing应用中的日期选择...