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

📄 calendarpanel.java

📁 java GUI使用实现的日历
💻 JAVA
字号:
package MyCalender;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;

import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
import javax.swing.plaf.basic.BasicPanelUI;

/**
 * @author 邱鹏
 * @version 1.0
 * @date:2008年4月1日
 * 
 */
public class CalendarPanel extends JPanel {
	public static final String WEEK_SUN = "星期天";

	public static final String WEEK_MON = "星期一";

	public static final String WEEK_TUE = "星期二";

	public static final String WEEK_WED = "星期三";

	public static final String WEEK_THU = "星期四";

	public static final String WEEK_FRI = "星期五";

	public static final String WEEK_SAT = "星期六";

	/* 定义将要用来显示在日历星期栏的七个常量 */
	public static final Color background = Color.lightGray;/* 表格背景颜色 */

	public static final Color foreground = Color.black;/* 表格的前景颜色 */

	public static final Color headerBackground = Color.pink;/* 表头的背景色 */

	public static final Color headerForeground = Color.darkGray;/* 表头的文字颜色 */

	public static final Color selectedBackground = Color.blue;/* 设置表示今天的单元格的背景颜色 */

	public static final Color selectedForeground = Color.PINK;/* 设置表示今天的单元格的文字颜色 */

	private JLabel yearsLabel;/* "显示Year:"的JLabel */

	private JSpinner yearsSpinner;/* 用来调整年的JSpinner */

	private JLabel monthsLabel;

	private JComboBox monthsComboBox;

	private JTable daysTable;

	private AbstractTableModel daysModel;

	private Calendar calendar;

	public CalendarPanel() {
		init();
	}

	public void init() {
		setSize(240, 172);
		setLayout(new BorderLayout());
		calendar = Calendar.getInstance();
		calendar = Calendar.getInstance();
		yearsLabel = new JLabel("Year: ");
		yearsLabel.setText("年 :");
		yearsSpinner = new JSpinner();
		yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner, "0000"));
		yearsSpinner.setValue(new Integer(calendar.get(Calendar.YEAR)));
		yearsSpinner.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) yearsSpinner.getValue())
						.intValue());
				int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
				calendar
						.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);
				updateView();
			}
		});

		JPanel yearMonthPanel = new JPanel();
		add(yearMonthPanel, BorderLayout.NORTH);
		yearMonthPanel.setLayout(new BorderLayout());
		yearMonthPanel.setBackground(new Color(195, 179, 133));
		yearMonthPanel.setUI(new BasicPanelUI());
		yearMonthPanel.add(new JPanel(), BorderLayout.CENTER);
		JPanel yearPanel = new JPanel();
		yearMonthPanel.add(yearPanel, BorderLayout.WEST);
		yearPanel.setLayout(new BorderLayout());
		yearPanel.add(yearsLabel, BorderLayout.WEST);
		yearPanel.add(yearsSpinner, BorderLayout.CENTER);

		monthsLabel = new JLabel("Month: ");
		monthsLabel.setText("月 :");
		monthsComboBox = new JComboBox();
		for (int i = 1; i <= 12; i++) {
			monthsComboBox.addItem(new Integer(i));
		}
		monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));
		monthsComboBox.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, monthsComboBox.getSelectedIndex());
				int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
				calendar
						.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);
				updateView();
			}
		});
		JPanel monthPanel = new JPanel();
		yearMonthPanel.add(monthPanel, BorderLayout.EAST);
		monthPanel.setLayout(new BorderLayout());
		monthPanel.add(monthsLabel, BorderLayout.WEST);
		monthPanel.add(monthsComboBox, BorderLayout.CENTER);

		daysModel = new AbstractTableModel() {
			public int getRowCount() {
				return 7;
			}

			public int getColumnCount() {
				return 7;
			}

			public Object getValueAt(int row, int column) {
				if (row == 0) {
					return getHeader(column);
				}
				row--;
				Calendar calendar = (Calendar) CalendarPanel.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);
				}
			}
		};

		daysTable = new CalendarTable(daysModel, calendar);
		daysTable.setCellSelectionEnabled(true);
		daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		daysTable.setDefaultRenderer(daysTable.getColumnClass(0),
				new TableCellRenderer() {
					public Component getTableCellRendererComponent(
							JTable table, Object value, boolean isSelected,
							boolean hasFocus, int row, int column) {
						System.out.println("**|||**"+column);
						String text = (value == null) ? "" : value.toString();
						JLabel cell = new JLabel(text);
						cell.setOpaque(true);
						if (row == 0) {
							cell.setForeground(headerForeground);
							cell.setBackground(headerBackground);
						} else {
							if (isSelected) {
								cell.setForeground(selectedForeground);
								cell.setBackground(selectedBackground);
								cell.setFont(new Font("宋体",Font.BOLD,25));
							} else {
								cell.setForeground(foreground);
								cell.setBackground(background);
							}
						}

						return cell;
					}
				});
		updateView();

		add(daysTable, BorderLayout.CENTER);
	}

	public static String getHeader(int index) {
		switch (index) {
		case 0:
			return WEEK_SUN;
		case 1:
			return WEEK_MON;
		case 2:
			return WEEK_TUE;
		case 3:
			return WEEK_WED;
		case 4:
			return WEEK_THU;
		case 5:
			return WEEK_FRI;
		case 6:
			return WEEK_SAT;
		default:
			return null;
		}
	}

	public void updateView() {
		daysModel.fireTableDataChanged();
		daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),
				calendar.get(Calendar.WEEK_OF_MONTH));
		daysTable.setColumnSelectionInterval(
				calendar.get(Calendar.DAY_OF_WEEK) - 1, calendar
						.get(Calendar.DAY_OF_WEEK) - 1);
	}

	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);
			if (obj != null) {
				calendar.set(Calendar.DAY_OF_MONTH, ((Integer) obj).intValue());
			}
		}

	}

	public static void main(String[] args) {

	}

}

⌨️ 快捷键说明

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