首页>代码>java swing日历calendar demo源代码下载>/calanders/src/can/lyj/com/MyDate.java
package can.lyj.com;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Calendar;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class MyDate extends JPanel implements MouseListener {
	int years, months;
	String[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
	int[][] date = null;
	int day = 0;
	JLabel addy, jiany, addm, jianmon;
	String ymd;
	JFrame jf;
	JComponent com;
	JLabel today;

	public MyDate(JFrame jf, JComponent com) {
		this.jf = jf;
		this.com = com;
		setSize(380, 180);
		setLayout(null);
		JButton add = new JButton("+");
		add.setSize(20, 20);
		years = Calendar.getInstance().get(Calendar.YEAR);//
		months = Calendar.getInstance().get(Calendar.MONTH) + 1;//
		date = Mycalander.getDateAry(years, months);
		day = Calendar.getInstance().get(Calendar.DATE);//
		addm = new JLabel(">");
		jianmon = new JLabel("<");
		addy = new JLabel(">>");
		jiany = new JLabel("<<");
		today = new JLabel("今天");
		today.setBounds(280, 5, 50, 20);
		add(today);
		jiany.setBounds(50, 5, 30, 20);
		jianmon.setBounds(80, 5, 30, 20);
		addy.setBounds(250, 5, 30, 20);
		addm.setBounds(230, 5, 30, 20);
		jianmon.addMouseListener(this);
		jiany.addMouseListener(this);
		addy.addMouseListener(this);
		addm.addMouseListener(this);
		today.addMouseListener(this);
		ymd = years + "年" + months + "月" + day + "日";
		add(jiany);
		add(jianmon);
		add(addy);
		add(addm);
		addMouseListener(this);
		// setVisible(true);
	}

	public static synchronized void rigester(final JComponent date,
			final JFrame jfs) {
		final JFrame jf = new JFrame();
		jf.setSize(380, 180);
		MyDate my = new MyDate(jf, date);
		jf.add(my);
		jf.setResizable(false);
		jf.setUndecorated(true);
		date.addMouseListener(new MouseListener() {
			public void mouseClicked(MouseEvent arg0) {
				int y = (int) date.getSize().getHeight();
				jf.setLocation((int) jfs.getLocation().getX(), (int) jfs
						.getLocation().getY()
						+ y + 30);
				jf.setVisible(true);
			}

			public void mouseEntered(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			public void mouseExited(MouseEvent arg0) {
			}

			public void mousePressed(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			public void mouseReleased(MouseEvent arg0) {
				jf.setVisible(false);

			}
		});

	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.drawString(ymd, 120, 20);
		for (int i = 0; i < weeks.length; i++) {
			g.setColor(Color.RED);
			g.drawString(weeks[i], 37 + i * 50, 40);
			g.drawRect(30 + i * 50, 27, 45, 15);
		}
		for (int i = 0; i < date.length; i++) {
			for (int j = 0; j < date[0].length; j++) {
				if (date[i][j] != 0) {
					if (date[i][j] == day) {
						g.setColor(Color.green);
					} else if (i == 0 && date[0][j] > 7) {
						g.setColor(Color.YELLOW);
					} else if (i >= 4 && date[i][j] <= 14) {
						g.setColor(Color.MAGENTA);
					} else {
						g.setColor(new Color(140, 140, 140));
					}
					g.drawString(date[i][j] + "", 50 + j * 50, 60 + i * 20);

				}
				g.setColor(new Color(140, 140, 140));
				g.drawRect(30 + j * 50, 47 + i * 20, 45, 15);
			}
		}

	};

	/**
	 * 获得选择的日历
	 * 
	 * @return
	 */
	public String getSelected(int years, int months, int day) {

		return years + "-" + months + "-" + day;
	}

	public void mouseClicked(MouseEvent key) {
		if (key.getSource() == today) {
			years = Calendar.getInstance().get(Calendar.YEAR);//
			months = Calendar.getInstance().get(Calendar.MONTH) + 1;//
			date = Mycalander.getDateAry(years, months);
			day = Calendar.getInstance().get(Calendar.DATE);//
			repaint();
			return;
		}
		if (key.getSource() == jianmon) {
			months -= months == 1 ? 0 : 1;
		} else if (key.getSource() == addy) {

			years += 1;

		} else if (key.getSource() == addm) {

			months += months == 12 ? 0 : 1;
		} else if (key.getSource() == jiany) {
			years -= years == 0 ? 0 : 1;
		}
		int x = (int) key.getPoint().getX();
		int y = (int) key.getPoint().getY();

		int column = (x - 40) % 50 >= 39 ? (x - 40) / 50 + 1 : (x - 40) / 50;
		int row = (y - 50) / 20;
		if (row >= 0 && column < 7 && row <= 6 && date[row][column] != 0) {
			day = date[row][column];
			jf.setVisible(false);
			JTextField jf = (JTextField) com;
			int yr, mn;
			if (row == 0 && date[0][column] > 7) {
				yr = months == 1 ? years - 1 : years;
				mn = months == 1 ? 12 : months - 1;
			} else if (row >= 4 && date[row][column] <= 14) {
				mn = months == 12 ? 1 : months + 1;
				yr = months == 12 ? years + 1 : years;
			} else {
				yr = years;
				mn = months;
			}

			jf.setText(getSelected(yr, mn, day));

		}
		ymd = years + "年" + months + "月" + day + "日";
		date = Mycalander.getDateAry(years, months);
		repaint();

	}

	public void mouseEntered(MouseEvent key) {
		// TODO Auto-generated method stub
		Object source = key.getSource();
		if (source == addy || source == jiany || source == addm
				|| source == jianmon) {
			JLabel jb = (JLabel) source;
			jb.setBackground(Color.red);
			add(jb);
		}
	}

	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void mouseReleased(MouseEvent arg0) {

	}

	public static void main(String[] args) {
		JFrame j = new JFrame();
		System.out.println(111);
		j.setSize(100, 20);
		j.setLocation(200, 300);
		// j.setResizable(false);
		j.setLayout(null);
		JTextField jt = new JTextField();
		jt.setBounds(20, 20, 100, 20);
		JTextField jt1 = new JTextField();
		jt1.setBounds(20, 40, 100, 20);
		j.setResizable(false);
		j.setContentPane(jt);
		rigester(jt, j);
		j.pack();
		j.setVisible(true);
	}

}
最近下载更多
wadadd  LV7 2022年9月5日
Demo1111  LV30 2021年12月12日
skyer5217  LV2 2020年12月23日
taqinchuan  LV1 2020年8月2日
admin_z  LV22 2020年5月29日
xuexue123  LV1 2020年5月28日
116699  LV1 2020年3月30日
小强111111  LV20 2020年2月15日
yongzheng132  LV17 2019年6月24日
寸头的春天  LV1 2019年5月11日
最近浏览更多
yeshun 4月26日
暂无贡献等级
woldxy  LV12 4月1日
Ji123455  LV8 2023年9月21日
SILKYYY 2023年5月25日
暂无贡献等级
xuexizhuanyong23  LV16 2023年4月29日
qq1061521319  LV4 2022年11月14日
香菇肉饼汤  LV8 2022年10月30日
3233497907  LV1 2022年10月21日
alonely23  LV1 2022年10月20日
wadadd  LV7 2022年9月5日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友