java的Applet编写的日历小工具

日历效果:



实现代码:

package com.test;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Date;
import java.util.StringTokenizer;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.UIManager;

/**
 * Title: Swing日历
 * Description: 操作日期
 * @version 1.0.1
 */

class JCalendar extends JPanel {
	// 动态表示年月日
	private int year = 0;
	private int month = 0;
	private int day = 0;
	// 主面板
	private JPanel Main = new JPanel();
	// 日面板
	private JPanel jPanelDay = new JPanel();
	// 月面板
	private JPanel jPanelMonth = new JPanel();
	// 年的输入位置
	private JTextField Year = new JTextField();
	// 月的输入位置
	private JTextField Month = new JTextField();
	// 减少月份
	private JButton MonthDown = new JButton();
	// 增加月份
	private JButton MonthUp = new JButton();

	private JPanel jPanelButton = new JPanel();
	// 减少年份
	private JButton YearDown = new JButton();
	// 增加年份
	private JButton YearUp = new JButton();
	// 显示日期的位置
	private JLabel Out = new JLabel();
	// 中国时区,以后可以从这里扩展可以设置时区的功能
	private Locale l = Locale.CHINESE;
	// 主日历
	private GregorianCalendar cal = new GregorianCalendar(l);
	// 星期面板
	private JPanel weekPanel = new JPanel();
	// 天按钮组
	private JToggleButton[] days = new JToggleButton[42];
	// 天面板
	private JPanel Days = new JPanel();
	// 标示
	private JLabel jLabel1 = new JLabel();
	private JLabel jLabel2 = new JLabel();
	private JLabel jLabel3 = new JLabel();
	private JLabel jLabel4 = new JLabel();
	private JLabel jLabel5 = new JLabel();
	private JLabel jLabel6 = new JLabel();
	private JLabel jLabel7 = new JLabel();
	// 当前选择的天数按钮
	private JToggleButton cur = null;
	// 月份天数数组,用来取得当月有多少天
	// 1 2 3 4 5 6 7 8 9 10 11 12
	private int[] mm = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	// 空日期构造函数
	public JCalendar() {
		try {
			jbInit();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	// 带日期设置的构造函数
	public JCalendar(int year, int month, int day) {
		cal.set(year, month, day);
		try {
			jbInit();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 带日历输入的构造函数
	public JCalendar(GregorianCalendar calendar) {
		cal = calendar;
		try {
			jbInit();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 带日期输入的构造函数
	public JCalendar(Date date) {
		cal.setTime(date);
		try {
			jbInit();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 初始化组件
	private void jbInit() throws Exception {
		// 初始化年、月、日
		iniCalender();

		this.setLayout(new BorderLayout());
		this.setBorder(BorderFactory.createRaisedBevelBorder());
		this.setMaximumSize(new Dimension(200, 200));
		this.setMinimumSize(new Dimension(200, 200));
		this.setPreferredSize(new Dimension(200, 200));

		Main.setLayout(new BorderLayout());
		Main.setBackground(SystemColor.info);
		Main.setBorder(null);

		Out.setBackground(Color.lightGray);
		Out.setHorizontalAlignment(SwingConstants.CENTER);
		Out.setMaximumSize(new Dimension(100, 19));
		Out.setMinimumSize(new Dimension(100, 19));
		Out.setPreferredSize(new Dimension(100, 19));

		jLabel1.setForeground(Color.red);
		jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);
		jLabel1.setText("日");
		jLabel2.setForeground(Color.blue);
		jLabel2.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel2.setHorizontalTextPosition(SwingConstants.CENTER);
		jLabel2.setText("六");
		jLabel3.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel3.setHorizontalTextPosition(SwingConstants.CENTER);
		jLabel3.setText("五");
		jLabel4.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel4.setHorizontalTextPosition(SwingConstants.CENTER);
		jLabel4.setText("四");
		jLabel5.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel5.setHorizontalTextPosition(SwingConstants.CENTER);
		jLabel5.setText("三");
		jLabel6.setBorder(null);
		jLabel6.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel6.setHorizontalTextPosition(SwingConstants.CENTER);
		jLabel6.setText("二");
		jLabel7.setBackground(Color.lightGray);
		jLabel7.setForeground(Color.black);
		jLabel7.setBorder(null);
		jLabel7.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel7.setHorizontalTextPosition(SwingConstants.CENTER);
		jLabel7.setText("一");

		weekPanel.setBackground(UIManager
				.getColor("InternalFrame.activeTitleGradient"));
		weekPanel.setBorder(BorderFactory.createEtchedBorder());
		weekPanel.setLayout(new GridLayout(1, 7));
		weekPanel.add(jLabel1, null);
		weekPanel.add(jLabel7, null);
		weekPanel.add(jLabel6, null);
		weekPanel.add(jLabel5, null);
		weekPanel.add(jLabel4, null);
		weekPanel.add(jLabel3, null);
		weekPanel.add(jLabel2, null);

		MonthUp.setAlignmentX((float) 0.0);
		MonthUp.setActionMap(null);

		jPanelMonth.setBackground(SystemColor.info);
		jPanelMonth.setLayout(new BorderLayout());
		jPanelMonth.setBorder(BorderFactory.createEtchedBorder());

		Month.setBorder(null);
		Month.setHorizontalAlignment(SwingConstants.CENTER);
		Month.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				Month_mouseClicked(e);
			}
		});
		Month.addKeyListener(new java.awt.event.KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				Month_keyPressed(e);
			}
		});

		MonthDown.setBorder(null);
		MonthDown.setText("\u25C4");
		MonthDown.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(ActionEvent e) {
				MonthDown_actionPerformed(e);
			}
		});
		MonthUp.setBorder(null);
		MonthUp.setText("\u25BA");
		MonthUp.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(ActionEvent e) {
				MonthUp_actionPerformed(e);
			}
		});

		jPanelButton.setLayout(null);
		jPanelButton.setBorder(null);
		jPanelButton
				.addComponentListener(new java.awt.event.ComponentAdapter() {
					public void componentResized(
							java.awt.event.ComponentEvent evt) {
						jPanelButtonComponentResized(evt);
					}
				});

		Year.setBorder(BorderFactory.createEtchedBorder());
		Year.setMaximumSize(new Dimension(80, 25));
		Year.setMinimumSize(new Dimension(80, 25));
		Year.setPreferredSize(new Dimension(80, 25));
		Year.setHorizontalAlignment(SwingConstants.CENTER);
		Year.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				Year_mouseClicked(e);
			}
		});
		Year.addKeyListener(new java.awt.event.KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				Year_keyPressed(e);
			}
		});

		YearDown.setBorder(null);
		YearDown.setMaximumSize(new Dimension(16, 16));
		YearDown.setMinimumSize(new Dimension(16, 16));
		YearDown.setPreferredSize(new Dimension(16, 16));
		YearDown.setSize(new Dimension(16, 16));
		YearDown.setText("▼");
		YearDown.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(ActionEvent e) {
				YearDown_actionPerformed(e);
			}
		});
		YearUp.setBorder(null);
		YearUp.setMaximumSize(new Dimension(16, 16));
		YearUp.setMinimumSize(new Dimension(16, 16));
		YearUp.setPreferredSize(new Dimension(16, 16));
		YearUp.setSize(new Dimension(16, 16));
		YearUp.setText("▲");
		YearUp.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(ActionEvent e) {
				YearUp_actionPerformed(e);
			}
		});

		jPanelDay.setLayout(new BorderLayout());

		Days.setLayout(new GridLayout(6, 7));
		Days.setBackground(SystemColor.info);

		for (int i = 0; i < 42; i++) {
			days[i] = new JToggleButton();
			days[i].setBorder(null);
			days[i].setBackground(SystemColor.info);
			days[i].setHorizontalAlignment(SwingConstants.CENTER);
			days[i].setHorizontalTextPosition(SwingConstants.CENTER);
			// days[i].setSize(l,l);
			days[i].addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(ActionEvent e) {
					day = Integer.parseInt(((JToggleButton) e.getSource())
							.getText());
					showDate();
					showDays();
				}
			});
			Days.add(days[i]);
		}

		this.add(Main, BorderLayout.NORTH);
		this.add(jPanelDay, BorderLayout.CENTER);
		this.add(jPanelMonth, BorderLayout.SOUTH);

		Main.add(Year, BorderLayout.CENTER);
		Main.add(Out, BorderLayout.WEST);
		Main.add(jPanelButton, BorderLayout.EAST);

		jPanelButton.add(YearUp);
		jPanelButton.add(YearDown);

		jPanelDay.add(weekPanel, BorderLayout.NORTH);
		jPanelDay.add(Days, BorderLayout.CENTER);

		jPanelMonth.add(Month, BorderLayout.CENTER);
		jPanelMonth.add(MonthDown, BorderLayout.WEST);
		jPanelMonth.add(MonthUp, BorderLayout.EAST);

		showMonth();
		showYear();
		showDate();
		showDays();
	}

	// 自定义重画年选择面板
	void jPanelButtonComponentResized(java.awt.event.ComponentEvent evt) {
		YearUp.setLocation(0, 0);
		YearDown.setLocation(0, YearUp.getHeight());
		jPanelButton.setSize(YearUp.getWidth(), YearUp.getHeight() * 2);
		jPanelButton.setPreferredSize(new Dimension(YearUp.getWidth(), YearUp
				.getHeight() * 2));
		jPanelButton.updateUI();
	}

	// 增加年份
	void YearUp_actionPerformed(ActionEvent e) {
		year++;
		showYear();
		showDate();
		showDays();
	}

	// 减少年份
	void YearDown_actionPerformed(ActionEvent e) {
		year--;
		showYear();
		showDate();
		showDays();
	}

	// 减少月份
	void MonthDown_actionPerformed(ActionEvent e) {
		month--;
		if (month < 0) {
			month = 11;
			year--;
			showYear();
		}
		showMonth();
		showDate();
		showDays();
	}

	// 增加月份
	void MonthUp_actionPerformed(ActionEvent e) {
		month++;
		if (month == 12) {
			month = 0;
			year++;
			showYear();
		}
		showMonth();
		showDate();
		showDays();
	}

	// 初始化年月日
	void iniCalender() {
		year = cal.get(Calendar.YEAR);
		month = cal.get(Calendar.MONTH);
		day = cal.get(Calendar.DAY_OF_MONTH);
	}

	// 刷新月份
	void showMonth() {
		Month.setText(Integer.toString(month + 1) + "月");
	}

	// 刷新年份
	void showYear() {
		Year.setText(Integer.toString(year) + "年");
	}

	// 刷新日期
	void showDate() {
		Out.setText(Integer.toString(year) + "-" + Integer.toString(month + 1)
				+ "-" + Integer.toString(day));
	}

	// 重画天数选择面板
	void showDays() {
		cal.set(year, month, 1);
		int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
		int n = mm[month];
		if (cal.isLeapYear(year) && month == 1)
			n++;
		int i = 0;
		for (; i < firstDayOfWeek - 1; i++) {
			days[i].setEnabled(false);
			days[i].setSelected(false);
			days[i].setText("");
		}
		int d = 1;
		for (; d <= n; d++) {
			days[i].setText(Integer.toString(d));
			days[i].setEnabled(true);
			if (d == day)
				days[i].setSelected(true);
			else
				days[i].setSelected(false);
			;
			i++;
		}
		for (; i < 42; i++) {
			days[i].setEnabled(false);
			days[i].setSelected(false);
			days[i].setText("");
		}
	}

	// 单击年份面板选择整个年份字符串
	void SelectionYear() {
		Year.setSelectionStart(0);
		Year.setSelectionEnd(Year.getText().length());
	}

	// 单击月份面板选择整个月份字符串
	void SelectionMonth() {
		Month.setSelectionStart(0);
		Month.setSelectionEnd(Month.getText().length());
	}

	// 月份面板响应鼠标单击事件
	void Month_mouseClicked(MouseEvent e) {
		// SelectionMonth();
		inputMonth();
	}

	// 检验输入的月份
	void inputMonth() {
		String s;
		if (Month.getText().endsWith("月")) {
			s = Month.getText().substring(0, Month.getText().length() - 1);
		} else
			s = Month.getText();
		month = Integer.parseInt(s) - 1;
		this.showMe();
	}

	// 月份面板键盘敲击事件响应
	void Month_keyPressed(KeyEvent e) {
		if (e.getKeyChar() == 10)
			inputMonth();
	}

	// 年份面板响应鼠标单击事件
	void Year_mouseClicked(MouseEvent e) {
		// SelectionYear();
		inputYear();
	}

	// 年份键盘敲击事件响应
	void Year_keyPressed(KeyEvent e) {
		// System.out.print(new Integer(e.getKeyChar()).byteValue());
		if (e.getKeyChar() == 10)
			inputYear();
	}

	// 检验输入的年份字符串
	void inputYear() {
		String s;
		if (Year.getText().endsWith("年")) {
			s = Year.getText().substring(0, Year.getText().length() - 1);
		} else
			s = Year.getText();
		year = Integer.parseInt(s);
		this.showMe();
	}

	// 以字符串形式返回日期,yyyy-mm-dd
	public String getDate() {
		return Out.getText();
	}

	// 以字符串形式输入日期,yyyy-mm-dd
	public void setDate(String date) {
		if (date != null) {
			StringTokenizer f = new StringTokenizer(date, "-");
			if (f.hasMoreTokens())
				year = Integer.parseInt(f.nextToken());
			if (f.hasMoreTokens())
				month = Integer.parseInt(f.nextToken());
			if (f.hasMoreTokens())
				day = Integer.parseInt(f.nextToken());
			cal.set(year, month, day);
		}
		this.showMe();
	}

	// 以日期对象形式输入日期
	public void setTime(Date date) {
		cal.setTime(date);
		this.iniCalender();
		this.showMe();
	}

	// 返回日期对象
	public Date getTime() {
		return cal.getTime();
	}

	// 返回当前的日
	public int getDay() {
		return day;
	}

	// 设置当前的日
	public void setDay(int day) {
		this.day = day;
		cal.set(this.year, this.month, this.day);
		this.showMe();
	}

	// 设置当前的年
	public void setYear(int year) {
		this.year = year;
		cal.set(this.year, this.month, this.day);
		this.showMe();
	}

	// 返回当前的年
	public int getYear() {
		return year;
	}

	// 返回当前的月
	public int getMonth() {
		return month;
	}

	// 设置当前的月
	public void setMonth(int month) {
		this.month = month;
		cal.set(this.year, this.month, this.day);
		this.showMe();
	}

	// 刷新
	public void showMe() {
		this.showDays();
		this.showMonth();
		this.showYear();
		this.showDate();
	}

}

public class TestJCalendar {
	public static void main(String[] args) {
		JFrame f = new JFrame();
		f.setContentPane(new JCalendar());
		f.pack();
		// f.setResizable(false);
		f.show();
	}
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.hexiang.utils; import java.text.SimpleDateFormat; import java.util.*; public class CalendarUtil { public static void main(String args[]) { System.out.println("First day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByWeek(new Date()))); System.out.println("Last day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByWeek(new Date()))); System.out.println("First day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByMonth(new Date()))); System.out.println("Last day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByMonth(new Date()))); } /** * 获得所在星期的第一天 */ public static Date getFirstDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 now.set(Calendar.DATE, first_day_of_week); return now.getTime(); } /** * 获得所在星期的最后一天 */ public static Date getLastDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 int last_day_of_week = first_day_of_week + 6; // 星期日 now.set(Calendar.DATE, last_day_of_week); return now.getTime(); } /** * 获得所在月份的最后一天 * @param 当前月份所在的时间 * @return 月份的最后一天 */ public static Date getLastDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.MONTH, now.get(Calendar.MONTH) + 1); now.set(Calendar.DATE, 1); now.set(Calendar.DATE, now.get(Calendar.DATE) - 1); now.set(Calendar.HOUR, 11); now.set(Calendar.MINUTE, 59); now.set(Calendar.SECOND, 59); return now.getTime(); } /** * 获得所在月份的第一天 * @param 当前月份所在的时间 * @return 月份的第一天 */ public static Date getFirstDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.DATE, 0); now.set(Calendar.HOUR, 12); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); return now.getTime(); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值