⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dateselecter.java

📁 此文档针对开发人员和测试人员。第二章对软件进行了全面的描述。第三章对接口进行了分析。第四章对软件实现的功能进行概述。第五章对软件后续开发实现提出的要求。第六章提出其他一些在软件开发过程中需要注意的问题
💻 JAVA
字号:
package com.ciash.common.gui;

import java.awt.Rectangle;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Calendar;

import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * 一个日期选择控件,可以选择指定的年月日,并可以返回一个Calendar实例
 * <p>
 * 注意:当选择的任一数值为--时,Calendar实例将返回null
 */

public class DateSelecter extends JPanel {

	private static final long serialVersionUID = -5110694109466038061L;

	private JComboBox year = new JComboBox();

	private JComboBox month = new JComboBox();

	private JComboBox day = new JComboBox();

	private JLabel yearLabel = new JLabel();

	private JLabel monthLabel = new JLabel();

	private JLabel dayLabel = new JLabel();

	Calendar date = Calendar.getInstance();

	private final static String NULL_ITEM = "--";

	private boolean isEditable = true;

	public DateSelecter() {
		Calendar date = Calendar.getInstance();
		jbInit();
		int y = date.get(Calendar.YEAR) - 49;
		int c = 100;
		if (y >= 0 && c >= 1) {
			resetYearComponent(y, c);
			resetMonthComponent();
			resetDayComponent(getDaysOfMonth(c, 12));
			setSelect(0);
		}
	}

	public DateSelecter(int baseYear, int years) {
		jbInit();
		if (baseYear >= 0 && years >= 1) {
			resetYearComponent(baseYear, years);
			resetMonthComponent();
			resetDayComponent(getDaysOfMonth(baseYear, 12));
			setSelect(0);
		}
	}

	private void jbInit() {
		yearLabel.setText(ChangeListener.YEAR);
		yearLabel.setBounds(new Rectangle(92, 2, 24, 21));
		monthLabel.setText(ChangeListener.MONTH);
		monthLabel.setBounds(new Rectangle(176, 2, 21, 21));
		dayLabel.setText(ChangeListener.DAY);
		dayLabel.setBounds(new Rectangle(253, 2, 21, 21));
		this.setLayout(null);
		this.setOpaque(true);
		day.setBounds(new Rectangle(197, 0, 56, 26));
		month.setBounds(new Rectangle(116, 0, 60, 26));
		year.setBounds(new Rectangle(0, 1, 92, 25));
		this.add(year, null);
		this.add(yearLabel, null);
		this.add(month, null);
		this.add(monthLabel, null);
		this.add(day, null);
		this.add(dayLabel, null);
		ChangeListener listener = new ChangeListener();
		year.addItemListener(listener);
		month.addItemListener(listener);
		day.addItemListener(listener);
	}

	public void setCalendar(Calendar date) {
		this.date = date;
		if (date != null) {
			String y = Integer.toString(date.get(Calendar.YEAR));
			String m = Integer.toString(date.get(Calendar.MONTH) + 1);
			String d = Integer.toString(date.get(Calendar.DATE));
			year.setSelectedItem(y);
			month.setSelectedItem(m);
			day.setSelectedItem(d);
		} else {
			year.setSelectedItem(NULL_ITEM);
			month.setSelectedItem(NULL_ITEM);
			day.setSelectedItem(NULL_ITEM);
		}
	}

	public Calendar getCalendar() {
		if (date == null) {
			return null;
		}
		return (Calendar) date.clone();
	}

	private void setDate(int y, int m, int d) {
		if (y == -1 || m == -1 || d == -1) {
			date = null;
		} else {
			date = Calendar.getInstance();
			date.set(y, m, d);
		}
	}

	private void resetYearComponent(int baseYear, int years) {
		year.addItem(NULL_ITEM);
		for (int i = 0; i < years; i++) {
			year.addItem((i + baseYear) + "");
		}
	}

	private void resetMonthComponent() {
		month.removeAllItems();
		month.addItem(NULL_ITEM);
		for (int i = 1; i <= 12; i++) {
			month.addItem(i + "");
		}
	}

	private void resetDayComponent(int date) {
		int index = day.getSelectedIndex();
		day.removeAllItems();
		day.addItem(NULL_ITEM);
		for (int i = 1; i <= date; i++) {
			day.addItem(i + "");
		}
		setSelect(index);
	}

	private void setSelect(int index) {
		if (index >= day.getItemCount()) {
			day.setSelectedIndex(day.getItemCount() - 1);
		} else {
			day.setSelectedIndex(index);
		}
	}

	private class ChangeListener
	implements ItemListener {

		public final static String YEAR = "年";

		public final static String MONTH = "月";

		public final static String DAY = "日";

		public void itemStateChanged(ItemEvent e) {
			try {
				setDay(e);
			} catch (NumberFormatException ex) {
				setDate(-1, -1, -1);
				return;
			}
		}

		private void setDay(ItemEvent e) throws NumberFormatException {
			int y = Integer.parseInt(year.getSelectedItem().toString());
			int m = Integer.parseInt(month.getSelectedItem().toString());
			int d = getDaysOfMonth(y, m);
			if (!e.getSource().equals(day)) {
				day.removeItemListener(this);
				resetDayComponent(d);
				day.addItemListener(this);
			}
			d = Integer.parseInt(day.getSelectedItem().toString());
			setDate(y, m, d);
		}
	}

	private static int getDaysOfMonth(int year, int month) {
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
		case 2:
			return lanurDays(year);
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		default:
			return -1;
		}
	}

	private static int lanurDays(int year) {
		if (year % 100 == 0 && year % 400 == 0 || year % 4 == 0)
			return 29;
		else
			return 28;
	}

	public void setEditable(boolean isEditable) {
		this.isEditable = isEditable;
		year.setEnabled(isEditable);
		month.setEnabled(isEditable);
		day.setEnabled(isEditable);
	}

	public boolean isEditable() {
		return isEditable;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -