1、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;imp
2、ort javax.swing.Popup;import javax.swing.PopupFactory;import javax.swing.SwingUtilities;import javax.swing.event.AncestorEvent;import javax.swing.event.AncestorListener;public class DateChooser extends JPanelprivate Date initDate;private Calendar now=Calendar.getInstance();private Calendar select;pr
3、ivate 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 b
4、oolean isShow=false;private Popup pop;public DateChooser() this(new Date();public DateChooser(Date date)initDate=date;select=Calendar.getInstance();select.setTime(initDate);initPanel();initLabel();public void setEnabled(boolean b)super.setEnabled(b);showDate.setEnabled(b);public Date getDate()return
5、 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(
6、jp3=new JP3(),BorderLayout.CENTER);monthPanel.add(up,BorderLayout.NORTH);monthPanel.add(jp4=new JP4(),BorderLayout.SOUTH);this.addAncestorListener(new AncestorListener()public void ancestorAdded(AncestorEvent event) public void ancestorRemoved(AncestorEvent event) /只要祖先组件一移动,马上就让popup消失public void a
7、ncestorMoved(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.for
8、mat(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.creat
9、eLineBorder(Color.GRAY);public void mouseEntered(MouseEvent me)if(showDate.isEnabled()showDate.setCursor(new Cursor(Cursor.HAND_CURSOR);showDate.setForeground(Color.RED);public void mouseExited(MouseEvent me)showDate.setCursor(new Cursor(Cursor.DEFAULT_CURSOR);showDate.setForeground(Color.BLACK);sho
10、wDate.setForeground(Color.CYAN);if(isShow)elseshowPanel(showDate);public void mouseReleased(MouseEvent me)showDate.addFocusListener(new FocusListener()public void focusLost(FocusEvent e)public void focusGained(FocusEvent e)/根据新的日期刷新private void refresh()jp1.updateDate();jp3.updateDate();SwingUtiliti
11、es.updateComponentTreeUI(this);/提交日期private void commit()System.out.println(选中的日期是:+sdf.format(select.getTime();showDate.setText(sdf.format(select.getTime();private void hidePanel()if(pop!=null)isShow=false;pop.hide();pop=null;private void showPanel(Component owner)Point show=new Point(0,showDate.ge
12、tHeight();SwingUtilities.convertPointToScreen(show,showDate);Dimension size=Toolkit.getDefaultToolkit().getScreenSize();int x=show.x;int y=show.y;if(xsize.width-295)x=size.width-295;if(yy-=188;pop=PopupFactory.getSharedInstance().getPopup(owner,monthPanel,x,y);pop.show();isShow=true;private class JP
13、1 extends JPanelJLabel left,right,center;public JP1()super(new BorderLayout();this.setBackground(new Color(160,185,215);initJP1();private void initJP1()left=new JLabel( right.setToolTipText(下一月left.setBorder(BorderFactory.createEmptyBorder(10,0,0,0);right.setBorder(BorderFactory.createEmptyBorder(10
14、,0,0,0);center=new JLabel(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()left.setCursor(new Cursor(Cursor.HAND_CURSOR);left.setForeground(Color.RE
15、D);left.setCursor(new Cursor(Cursor.DEFAULT_CURSOR);left.setForeground(Color.BLACK);select.add(Calendar.MONTH,-1);left.setForeground(Color.WHITE);refresh();right.addMouseListener(new MouseAdapter()right.setCursor(new Cursor(Cursor.HAND_CURSOR);right.setForeground(Color.RED);right.setCursor(new Curso
16、r(Cursor.DEFAULT_CURSOR);right.setForeground(Color.BLACK);select.add(Calendar.MONTH,1);right.setForeground(Color.WHITE);private void updateDate()center.setText(select.get(Calendar.YEAR)+年+(select.get(Calendar.MONTH)+1)+月private class JP2 extends JPanelpublic JP2()this.setPreferredSize(new Dimension(
17、295,20);protected void paintComponent(Graphics g)g.setFont(font);g.drawString(星期日 星期一 星期二 星期三 星期四 星期五 星期六,5,10);g.drawLine(0,15,getWidth(),15);private class JP3 extends JPanelpublic JP3()super(new GridLayout(6,7);this.setPreferredSize(new Dimension(295,100);initJP3();private void initJP3()public void updateDate()this.removeAll();lm.clear();Date temp=select.getTime();Calendar select=Calendar.getInstance();select.setTime(temp);select.set(Calendar.DAY_OF_MONTH,1);int index=select.get(Calenda
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1