Java简单的日历

概要:

Java简单的日历

| |目录

package net.xsoftlab.baike;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class CalendarDemo extends JApplet {
	// 定义星期天到星期六
	public static final String SUN = "周日";
	public static final String MON = "周一";
	public static final String TUE = "周二";
	public static final String WED = "周三";
	public static final String THU = "周四";
	public static final String FRI = "周五";
	public static final String SAT = "周六";
	// 设置背景颜色
	public static final Color background = new Color(240, 255, 255);
	// 设置前景颜色
	public static final Color foreground = new Color(128, 138, 135);
	// 设置题头星期的背景颜色和前景颜色
	public static final Color H_Background = new Color(240, 255, 240);
	public static final Color H_Foreground = new Color(61, 89, 171);
	// 设置被选中的日期的背景颜色和前景颜色
	public static final Color selectedBackground = new Color(245, 222, 179);
	public static final Color selectedForeground = new Color(255, 97, 0);
	private JPanel pan;
	private JLabel year_Label; // 年
	private JSpinner year_Spinner; // 年调控
	private JLabel month_Label; // 月
	private JComboBox month_ComboBox; // 月下拉框
	private JTable table; // 用来显示日期的table
	private AbstractTableModel model;
	private Calendar calendar;
	// 构造方法 初始化panel
	public CalendarDemo() {
		pan = (JPanel) getContentPane();
	}
	// 初始化,对所有的空间进行布局。
	public void init() {
		pan.setLayout(new BorderLayout());
		// 使用border布局管理器
		calendar = Calendar.getInstance();
		year_Label = new JLabel("年份: ");
		year_Spinner = new JSpinner();
		year_Spinner.setEditor(new JSpinner.NumberEditor(year_Spinner, "0000"));
		year_Spinner.setValue(new Integer(calendar.get(Calendar.YEAR)));
		// 增加监听 监听年份的改变
		year_Spinner.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent changeEvent) {
				int day = calendar.get(Calendar.DAY_OF_MONTH);
				calendar.set(Calendar.DAY_OF_MONTH, 1);
				calendar.set(Calendar.YEAR,
						((Integer) year_Spinner.getValue()).intValue());
				int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
				calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);
				change_View();
			}
		});
		JPanel Y_Mpanel = new JPanel();
		pan.add(Y_Mpanel, BorderLayout.NORTH);
		Y_Mpanel.setLayout(new BorderLayout());
		Y_Mpanel.add(new JPanel(), BorderLayout.CENTER);
		JPanel Y_Panel = new JPanel();
		Y_Mpanel.add(Y_Panel, BorderLayout.WEST);
		Y_Panel.setLayout(new BorderLayout());
		Y_Panel.add(year_Label, BorderLayout.WEST);
		Y_Panel.add(year_Spinner, BorderLayout.CENTER);
		month_Label = new JLabel("月份: ");
		// 向月份下拉框中增加内容
		month_ComboBox = new JComboBox();
		for (int i = 1; i <= 12; i++) {
			month_ComboBox.addItem("  " + new Integer(i) + " ");
		}
		month_ComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));
		// 监听月份的改变
		month_ComboBox.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent actionEvent) {
				int day = calendar.get(Calendar.DAY_OF_MONTH);
				calendar.set(Calendar.DAY_OF_MONTH, 1);
				calendar.set(Calendar.MONTH, month_ComboBox.getSelectedIndex());
				int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
				calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);
				change_View();
			}
		});
		JPanel M_Panel = new JPanel();
		Y_Mpanel.add(M_Panel, BorderLayout.EAST);
		M_Panel.setLayout(new BorderLayout());
		M_Panel.add(month_Label, BorderLayout.WEST);
		M_Panel.add(month_ComboBox, BorderLayout.CENTER);
		model = new AbstractTableModel() { // 创建AbstractTableModel对象,必须实现getRowCount,getColumnCount和getValueAt这三个方法
			// 设置行7
			public int getRowCount() { // 返回表格行的个数
				return 7;
			}
			// 设置列7
			public int getColumnCount() { // 返回表格列的个数
				return 7;
			}
			public Object getValueAt(int row, int column) { // 返回 row 和 column
															// 之间的单元格值。
				if (row == 0) {
					return getHeader(column);
				}
				row--;
				Calendar calendar = (Calendar) CalendarDemo.this.calendar
						.clone();
				calendar.set(Calendar.DAY_OF_MONTH, 1);
				int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
				int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1;
				int index = row * 7 + column;
				int dayIndex = index - moreDayCount + 1;
				if (index < moreDayCount || dayIndex > dayCount) {
					return null;
				} else {
					return new Integer(dayIndex);
				}
			}
		};
		table = new CalendarTable(model, calendar);
		// 设置每个cell可以被选中
		// table.setRowHeight(25);
		table.setCellSelectionEnabled(true);
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		table.setDefaultRenderer(table.getColumnClass(0),
				new TableCellRenderer() {
					public Component getTableCellRendererComponent(
							JTable table, Object value, boolean isSelected,
							boolean hasFocus, int row, int column) {
						String text = (value == null) ? "" : value.toString();
						JLabel cell = new JLabel(text);
						cell.setOpaque(true);
						if (row == 0) {
							cell.setForeground(H_Foreground);
							cell.setBackground(H_Background);
						} else {
							if (isSelected) {
								cell.setForeground(selectedForeground);
								cell.setBackground(selectedBackground);
							} else {
								cell.setForeground(foreground);
								cell.setBackground(background);
							}
						}
						return cell;
					}
				});
		change_View();
		pan.add(table);
	}
	public static String getHeader(int index) {
		switch (index) {
		case 0:
			return SUN;
		case 1:
			return MON;
		case 2:
			return TUE;
		case 3:
			return WED;
		case 4:
			return THU;
		case 5:
			return FRI;
		case 6:
			return SAT;
		default:
			return null;
		}
	}
	public void change_View() {
		model.fireTableDataChanged();// 对表格中的单元格进行侦听
		table.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),// 选择两参数间的行
				calendar.get(Calendar.WEEK_OF_MONTH));
		table.setColumnSelectionInterval(
				calendar.get(Calendar.DAY_OF_WEEK) - 1,
				calendar.get(Calendar.DAY_OF_WEEK) - 1);// 选择两参数间的列
	}
	// 设置日历的table
	public static class CalendarTable extends JTable {
		private Calendar calendar;
		public CalendarTable(TableModel model, Calendar calendar) {
			super(model);
			this.calendar = calendar;
		}
		public void changeSelection(int row, int column, boolean toggle,
				boolean extend) {
			super.changeSelection(row, column, toggle, extend);
			if (row == 0) {
				return;
			}
			Object obj = getValueAt(row, column);// 获取row行,column列间的值
			if (obj != null) {
				calendar.set(Calendar.DAY_OF_MONTH, ((Integer) obj).intValue());// 将给Calendar.DAY_OF_MONTH的值设置为int类型的数值
			}
		}
	}
	// 让applet做为一个可执行的程序来运行
	public static void main(String[] args) {
		JFrame frame = new JFrame("Calendar Application");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		CalendarDemo CalendarDemo = new CalendarDemo();
		CalendarDemo.init();
		frame.getContentPane().add(CalendarDemo);
		frame.setVisible(true);
	}
}


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
  • 全部评论(0)
资料加载中...
已关注 , 取消