`
lg_asus
  • 浏览: 190991 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

swing 日期组件

 
阅读更多
/**
 * 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 扩展组件 Swing 扩展组件

    Swing扩展组件是Java Swing库中的一个重要组成部分,它提供了丰富的用户界面元素,使得开发者能够创建出功能强大且具有吸引力的图形用户界面(GUI)。Swing是Java AWT(抽象窗口工具包)的一个替代品,提供了更多的...

    java swing 日期datepicker组件使用

    在Swing中,DatePicker是一个非常有用的组件,允许用户选择日期。这个压缩包包含了使用DatePicker组件的示例项目以及相关的jar包,帮助我们了解如何在Swing应用中集成和操作这个日期选择器。 DatePicker组件在Swing...

    java swing 时间日期选择控件

    Swing提供了JCalendar和JDatePicker这两个常用的日期选择组件,它们使得用户能够方便地在日历视图中选择日期,或者通过一个文本框和下拉小部件选择日期和时间。 1. **JCalendar**: 这是一个第三方组件,通常由`...

    Java Swing 日期时间组件

    在Swing中,开发人员可以使用各种组件来创建用户界面,其中包括日期和时间选择器组件。这个主题主要关注的是`DateChooser`,一个允许用户选择日期和时间的控件,通常用在需要用户输入日期或时间的应用场景。 `...

    JAVA Swing日期选择控件datepicker

    `datepicker.jar` 文件很可能就是一个包含DatePicker组件的第三方库,它可能包含了预定义的DatePicker类和相关方法,以便开发者在Swing应用中轻松集成日期选择功能。为了使用这个库,你需要将其添加到项目的类路径中...

    Swing 日期控件(包含源代码)

    在这个特定的资源中,我们关注的是一个经过二次封装的日期组件,用于改进原始的日期选择功能。 标题提到的"Swing 日期控件"是指在Swing应用中用来显示和选择日期的可视化组件。Swing本身并不直接提供一个内置的日期...

    swing 日期选择控件

    在Java Swing中,日期选择控件(DatePicker)是用于用户交互,方便他们选择特定日期的组件。Swing本身并没有内置的DatePicker控件,但开发者通常会利用第三方库来实现这一功能。这里提到的"swing 日期选择控件"很...

    java Swing日期控件

    `doc.doc` 文件则可能是一个关于如何使用这个 `DatePicker.jar` 组件的文档,包括如何在你的 Swing 应用程序中导入、实例化日期控件,以及如何设置和获取日期,还有可能涉及事件监听、格式化日期显示、国际化支持等...

    四种Java Swing日历组件

    在Swing中,日历组件对于处理日期选择和显示是非常有用的。以下将详细讲解四种不同的Java Swing日历组件及其应用。 1. **单击文本框弹出日历组件选择日期** 这种方式通常通过结合`JTextField`和自定义的日历对话框...

    javaswing日期datepicker组件使用

    在Swing中,DatePicker组件是一个方便的工具,允许用户选择日期,通常用于需要输入日期的表单或界面中。这个压缩包包含了关于如何在Java Swing应用中使用DatePicker组件的示例项目和相关的jar包。 DatePicker组件在...

    java的swing的日期组件DatePicker

    在Swing中,日期选择通常通过`javax.swing.JDatePicker`组件来实现,它提供了用户友好的界面,允许用户方便地选择日期。`DatePicker`组件并不是Swing的标准组件,但可以通过第三方库如JCalendar来获取。 `...

    JAVA SWING 日期控件(目前支持JLable和JTextField,若有需要可自行扩展其它控件)

    总结,`JAVA SWING 日期控件`是一个自定义的组件,用于提供日期选择功能,并具有可扩展性,适用于多种Swing组件。通过阅读并理解DateChooser.java的源码,开发者不仅可以学习到如何创建自定义Swing控件,还能了解到...

    基于java的开源的Swing组件 JIDE.zip

    2. **表单组件**:JIDE Forms包含了一组高级的表单组件,如日期选择器、滑块、颜色选择器等,以及布局管理器,帮助开发者构建美观且响应迅速的表单。 3. **菜单和工具栏**:JIDE提供了一套完整的菜单和工具栏组件,...

    java swing 日期控件

    综上所述,Java Swing 提供了多种日期选择组件,如`JDatePicker` 和 `JDateChooser`,结合`DefaultDateModel` 和日期格式化工具,能够创建功能丰富的日期输入界面。开发者可以根据项目需求选择适合的控件,并通过...

    Swing 日期控件(jar包)

    Swing提供了一系列组件,如按钮、文本框、菜单等,用于构建用户界面。在处理日期和时间选择时,Swing虽然没有内置的日期选择器,但可以通过第三方库来实现,例如"JDateField.jar"就是这样一个专门用于日期输入的控件...

    JAVA Swing日期选择控件datepicker的使用

    在Java Swing库中,DatePicker是一个常用的用户界面组件,它允许用户选择日期。Swing本身并不直接提供一个标准的DatePicker组件,但可以通过第三方库或者自定义组件实现。在本篇文章中,我们将深入探讨如何在Java ...

    Java实现日期选择,一个简单的Java Swing时间日期选择控件的代码示例,带有中文注释

    一个简单的Java Swing时间日期选择控件的代码示例,带有中文注释 代码创建了一个简单的Java Swing时间日期选择器,包含一个输入框、一...该代码使用了Java Swing库中的组件和事件处理机制来实现时间日期选择器的功能。

    java swing的日期控件

    接下来是JDatePicker,这是Java Swing中的另一个日期选择组件。它比JCalendar更简单,通常只显示一个日期输入字段和一个下拉的日历图标。用户点击图标时,会弹出一个小的日历窗口供用户选择日期。JDatePicker可以...

    Swing 日期插件

    在处理日期选择时,Swing虽然提供了基本的组件,如JComboBox,但有时这些组件可能不够便捷,特别是在需要用户输入日期时。这就是"Swing 日期插件"发挥作用的地方。 这个日期插件是为了简化Swing应用中的日期选择...

Global site tag (gtag.js) - Google Analytics