package wt.badminton.common;
/*
* DateChooser.java
*
* Created on 2007年8月20日, 下午6:07
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Stroke;
import java.awt.Toolkit;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Popup;
import javax.swing.PopupFactory;
import javax.swing.SwingUtilities;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
/**
*
* @author hadeslee
*/
public class DateChooser extends JPanel {
private Date initDate;
private Calendar now = Calendar.getInstance();
private Calendar select;
private JPanel monthPanel;// 月历
private JP1 jp1;// 四块面板,组成
private JP2 jp2;
private JP3 jp3;
private JP4 jp4;
private Font font = new Font("宋体", Font.PLAIN, 12);
private final LabelManager lm = new LabelManager();
private JLabel showDate;// ,toSelect;
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private boolean isShow = false;
private Popup pop;
private String selDate;
public String getSelDate() {
return selDate;
}
public void setSelDate(String selDate) {
this.selDate = selDate;
}
/**
* Creates a new instance of DateChooser
*/
public DateChooser() {
this(new Date());
}
public DateChooser(Date date) {
initDate = date;
select = Calendar.getInstance();
select.setTime(initDate);
initPanel();
this.setPreferredSize(new Dimension(90, 25));
this.setBorder(BorderFactory.createLineBorder(Color.GRAY));
this.commit();
//initLabel();
//showChooser();
//this.add(comp)
//Date.parse(s)
}
public void setEnabled(boolean b) {
super.setEnabled(b);
showDate.setEnabled(b);
}
/**
* 得到当前选择框的日期
*/
public Date getDate() {
return select.getTime();
}
// 根据初始化的日期,初始化面板
private void initPanel() {
monthPanel = new JPanel(new BorderLayout());
monthPanel.setBorder(BorderFactory.createLineBorder(Color.BLUE));
JPanel up = new JPanel(new BorderLayout());
up.add(jp1 = new JP1(), BorderLayout.NORTH);
up.add(jp2 = new JP2(), BorderLayout.CENTER);
monthPanel.add(jp3 = new JP3(), BorderLayout.CENTER);
monthPanel.add(up, BorderLayout.NORTH);
monthPanel.add(jp4 = new JP4(), BorderLayout.SOUTH);
this.add(monthPanel,BorderLayout.CENTER);
this.addAncestorListener(new AncestorListener() {
public void ancestorAdded(AncestorEvent event) {
}
public void ancestorRemoved(AncestorEvent event) {
}
// 只要祖先组件一移动,马上就让popup消失
public void ancestorMoved(AncestorEvent event) {
hidePanel();
}
});
}
// 初始化标签
private void initLabel() {
showDate = new JLabel(sdf.format(initDate));
showDate.setRequestFocusEnabled(true);
showDate.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
showDate.requestFocusInWindow();
}
});
// toSelect=new JLabel(sdf.format(initDate));
// toSelect.setBorder(BorderFactory.createLineBorder(Color.BLACK));
// toSelect.setRequestFocusEnabled(true);
this.setBackground(Color.WHITE);
this.add(showDate, BorderLayout.CENTER);
// this.add(toSelect,BorderLayout.EAST);
this.setPreferredSize(new Dimension(90, 25));
this.setBorder(BorderFactory.createLineBorder(Color.GRAY));
showDate.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setCursor(new Cursor(Cursor.HAND_CURSOR));
showDate.setForeground(Color.RED);
}
}
public void mouseExited(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
showDate.setForeground(Color.BLACK);
}
}
public void mousePressed(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setForeground(Color.CYAN);
if (isShow) {
hidePanel();
} else {
showPanel(showDate);
}
}
}
public void mouseReleased(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setForeground(Color.BLACK);
}
}
});
showDate.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
hidePanel();
}
public void focusGained(FocusEvent e) {
}
});
}
// 根据新的日期刷新
private void refresh() {
jp1.updateDate();
jp3.updateDate();
SwingUtilities.updateComponentTreeUI(this);
}
// 提交日期
private void commit() {
System.out.println("选中的日期是:" + sdf.format(select.getTime()));
//showDate.setText(sdf.format(select.getTime()));
this.setSelDate(""+sdf.format(select.getTime()));
hidePanel();
}
private void hidePanel() {
if (pop != null) {
isShow = false;
pop.hide();
pop = null;
}
}
private void showPanel(Component owner) {
if (pop != null) {
pop.hide();
}
Point show = new Point(0, owner.getHeight());
SwingUtilities.convertPointToScreen(show, owner);
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
int x = show.x;
int y = show.y;
if (x < 0) {
x = 0;
}
if (x > size.width - 295) {
x = size.width - 295;
}
if (y < size.height - 170) {
} else {
y -= 188;
}
pop = PopupFactory.getSharedInstance()
.getPopup(owner, monthPanel, x, y);
pop.show();
isShow = true;
}
private class JP1 extends JPanel {
JLabel left, right, center;
public JP1() {
super(new BorderLayout());
this.setBackground(new Color(160, 185, 215));
initJP1();
}
private void initJP1() {
left = new JLabel(" << ", JLabel.CENTER);
left.setToolTipText("上一月");
right = new JLabel(" >> ", JLabel.CENTER);
right.setToolTipText("下一月");
left.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
right.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
center = new JLabel("", JLabel.CENTER);
updateDate();
this.add(left, BorderLayout.WEST);
this.add(center, BorderLayout.CENTER);
this.add(right, BorderLayout.EAST);
this.setPreferredSize(new Dimension(295, 25));
left.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent me) {
left.setCursor(new Cursor(Cursor.HAND_CURSOR));
left.setForeground(Color.RED);
}
public void mouseExited(MouseEvent me) {
left.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
left.setForeground(Color.BLACK);
}
public void mousePressed(MouseEvent me) {
select.add(Calendar.MONTH, -1);
left.setForeground(Color.WHITE);
refresh();
}
public void mouseReleased(MouseEvent me) {
left.setForeground(Color.BLACK);
}
});
right.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent me) {
right.setCursor(new Cursor(Cursor.HAND_CURSOR));
right.setForeground(Color.RED);
}
public void mouseExited(MouseEvent me) {
right.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
right