Java 日期選擇器課件_第1頁
Java 日期選擇器課件_第2頁
Java 日期選擇器課件_第3頁
Java 日期選擇器課件_第4頁
Java 日期選擇器課件_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Java 日期選擇器效果如圖: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 ja

2、va.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.Simple

3、DateFormat;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;i

4、mport javax.swing.PopupFactory;import javax.swing.SwingUtilities;import javax.swing.event.AncestorEvent;import javax.swing.event.AncestorListener;public class DateChooser extends JPanel    private Date initDate;    private Calendar now=Calendar.getInstance();&

5、#160;   private Calendar select;    private JPanel monthPanel;/月歷    private JP1 jp1;/四塊面板,組成    private JP2 jp2;    private JP3 jp3;    private JP4 jp4;    private

6、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日");   &#

7、160;private boolean isShow=false;    private Popup pop;        public DateChooser()         this(new Date();        public DateChooser(Date date)  

8、60;     initDate=date;        select=Calendar.getInstance();        select.setTime(initDate);        initPanel();       

9、 initLabel();        public void setEnabled(boolean b)        super.setEnabled(b);        showDate.setEnabled(b);          &#

10、160; public Date getDate()        return select.getTime();        /根據(jù)初始化的日期,初始化面板    private void initPanel()        monthPanel=new JPanel(new BorderLayout

11、();        monthPanel.setBorder(BorderFactory.createLineBorder(Color.BLUE);        JPanel up=new JPanel(new BorderLayout();        up.add(jp1=new JP1(),BorderLayout.NORTH); &#

12、160;      up.add(jp2=new JP2(),BorderLayout.CENTER);        monthPanel.add(jp3=new JP3(),BorderLayout.CENTER);        monthPanel.add(up,BorderLayout.NORTH);     

13、0;  monthPanel.add(jp4=new JP4(),BorderLayout.SOUTH);        this.addAncestorListener(new AncestorListener()            public void ancestorAdded(AncestorEvent event)     

14、;                                                public void

15、 ancestorRemoved(AncestorEvent event)                                         /只要祖先組件一移動,馬上就讓popup消失

16、            public void ancestorMoved(AncestorEvent event)                 hidePanel();            &

17、#160;                   );        /初始化標(biāo)簽    private void initLabel()        showDate=new JLabel(sdf.forma

18、t(initDate);        showDate.setRequestFocusEnabled(true);        showDate.addMouseListener(new MouseAdapter()            public void mousePressed(MouseEvent me

19、)                showDate.requestFocusInWindow();                    );/        

20、toSelect=new JLabel(sdf.format(initDate);/        toSelect.setBorder(BorderFactory.createLineBorder(Color.BLACK);/        toSelect.setRequestFocusEnabled(true);        this.setBack

21、ground(Color.WHITE);        this.add(showDate,BorderLayout.CENTER);/        this.add(toSelect,BorderLayout.EAST);        this.setPreferredSize(new Dimension(90,25);  

22、0;     this.setBorder(BorderFactory.createLineBorder(Color.GRAY);        showDate.addMouseListener(new MouseAdapter()            public void mouseEntered(MouseEvent me) &

23、#160;              if(showDate.isEnabled()                    showDate.setCursor(new Cursor(Cursor.HAND_CURSOR);   

24、                 showDate.setForeground(Color.RED);                           &#

25、160;            public void mouseExited(MouseEvent me)                if(showDate.isEnabled()           &

26、#160;        showDate.setCursor(new Cursor(Cursor.DEFAULT_CURSOR);                    showDate.setForeground(Color.BLACK);      &#

27、160;                                 public void mousePressed(MouseEvent me)          

28、;      if(showDate.isEnabled()                    showDate.setForeground(Color.CYAN);              &

29、#160;     if(isShow)                        hidePanel();                

30、60;   else                        showPanel(showDate);                  

31、60;                                         public void mouseReleased(MouseEvent me)  

32、;              if(showDate.isEnabled()                    showDate.setForeground(Color.BLACK);      

33、                              );        showDate.addFocusListener(new FocusListener()    &

34、#160;       public void focusLost(FocusEvent e)                hidePanel();                  &#

35、160;     public void focusGained(FocusEvent e)                                    );  

36、;      /根據(jù)新的日期刷新    private void refresh()        jp1.updateDate();        jp3.updateDate();        SwingUtilities.updateComponent

37、TreeUI(this);        /提交日期    private void commit()        System.out.println("選中的日期是:"+sdf.format(select.getTime();        showDate.setText(sdf.forma

38、t(select.getTime();        hidePanel();        private void hidePanel()        if(pop!=null)            isShow=false;

39、60;           pop.hide();            pop=null;                private void showPanel(Component owner)

40、0;       if(pop!=null)            pop.hide();                Point show=new Point(0,showDate.getHeight();   &#

41、160;    SwingUtilities.convertPointToScreen(show,showDate);        Dimension size=Toolkit.getDefaultToolkit().getScreenSize();        int x=show.x;        int y

42、=show.y;        if(x<0)            x=0;                if(x>size.width-295)      

43、60;     x=size.width-295;                if(y        else            y-=188;   &

44、#160;            pop=PopupFactory.getSharedInstance().getPopup(owner,monthPanel,x,y);        pop.show();        isShow=true;      

45、  private class JP1 extends JPanel        JLabel left,right,center;        public JP1()            super(new BorderLayout();    &#

46、160;       this.setBackground(new Color(160,185,215);            initJP1();                private void initJP1()  

47、          left=new JLabel(" << ",JLabel.CENTER);            left.setToolTipText("上一月");            right

48、=new JLabel(" >> ",JLabel.CENTER);            right.setToolTipText("下一月");            left.setBorder(BorderFactory.createEmptyBorder(10,0,0,0);  

49、;          right.setBorder(BorderFactory.createEmptyBorder(10,0,0,0);            center=new JLabel("",JLabel.CENTER);          

50、60; updateDate();            this.add(left,BorderLayout.WEST);            this.add(center,BorderLayout.CENTER);          

51、0; this.add(right,BorderLayout.EAST);            this.setPreferredSize(new Dimension(295,25);            left.addMouseListener(new MouseAdapter()     

52、           public void mouseEntered(MouseEvent me)                    left.setCursor(new Cursor(Cursor.HAND_CURSOR);     

53、;               left.setForeground(Color.RED);                              

54、;  public void mouseExited(MouseEvent me)                    left.setCursor(new Cursor(Cursor.DEFAULT_CURSOR);             &#

55、160;      left.setForeground(Color.BLACK);                                public void mousePressed(MouseEvent

56、me)                    select.add(Calendar.MONTH,-1);                    left.setForeground(Color.WH

57、ITE);                    refresh();                           

58、60;    public void mouseReleased(MouseEvent me)                    left.setForeground(Color.BLACK);             

59、60;              );            right.addMouseListener(new MouseAdapter()                pu

60、blic void mouseEntered(MouseEvent me)                    right.setCursor(new Cursor(Cursor.HAND_CURSOR);                

61、    right.setForeground(Color.RED);                                public void mouseExited(MouseEvent me)  

62、60;                 right.setCursor(new Cursor(Cursor.DEFAULT_CURSOR);                    right.setForeground(Color

63、.BLACK);                                public void mousePressed(MouseEvent me)          &

64、#160;         select.add(Calendar.MONTH,1);                    right.setForeground(Color.WHITE);          

65、;          refresh();                                public void mouseReleased(MouseEvent

66、me)                    right.setForeground(Color.BLACK);                        

67、    );                private void updateDate()            center.setText(select.get(Calendar.YEAR)+"年"+(select.get(Calendar.MONTH

68、)+1)+"月");                private class JP2 extends JPanel        public JP2()            this.setPreferredSiz

69、e(new Dimension(295,20);                protected void paintComponent(Graphics g)            g.setFont(font);        

70、60;   g.drawString("星期日 星期一 星期二 星期三 星期四 星期五 星期六",5,10);            g.drawLine(0,15,getWidth(),15);                private class JP3 ext

71、ends JPanel        public JP3()            super(new GridLayout(6,7);            this.setPreferredSize(new Dimension(295,100);  &#

72、160;         initJP3();                private void initJP3()            updateDate();     

73、;           public void updateDate()            this.removeAll();            lm.clear();      &

74、#160;     Date temp=select.getTime();            Calendar select=Calendar.getInstance();            select.setTime(temp);     

75、0;      select.set(Calendar.DAY_OF_MONTH,1);            int index=select.get(Calendar.DAY_OF_WEEK);            int sum=(index=1?8:index);  &

76、#160;         select.add(Calendar.DAY_OF_MONTH,0-sum);            for(int i=0;i<42;i+)                select.add

77、(Calendar.DAY_OF_MONTH,1);                lm.addLabel(new MyLabel(select.get(Calendar.YEAR),                     &#

78、160;  select.get(Calendar.MONTH),select.get(Calendar.DAY_OF_MONTH);                        for(MyLabel my:lm.getLabels()        &#

79、160;       this.add(my);                        select.setTime(temp);            

80、0;   private class MyLabel extends JLabel implements Comparator,            MouseListener,MouseMotionListener        private int year,month,day;       

81、; private boolean isSelected;        public MyLabel(int year,int month,int day)            super(""+day,JLabel.CENTER);           

82、 this.year=year;            this.day=day;            this.month=month;            this.addMouseListener(this); 

83、;           this.addMouseMotionListener(this);            this.setFont(font);            if(month=select.get(Calendar.MONTH)&

84、#160;               this.setForeground(Color.BLACK);            else                t

85、his.setForeground(Color.LIGHT_GRAY);                        if(day=select.get(Calendar.DAY_OF_MONTH)             &#

86、160;  this.setBackground(new Color(160,185,215);            else                this.setBackground(Color.WHITE);      &#

87、160;                     public boolean getIsSelected()            return isSelected;        &#

88、160;       public void setSelected(boolean b,boolean isDrag)            isSelected=b;            if(b&&!isDrag)    &#

89、160;           int temp=select.get(Calendar.MONTH);                select.set(year,month,day);            

90、;    if(temp=month)                    SwingUtilities.updateComponentTreeUI(jp3);                els

91、e                    refresh();                            &

92、#160;           this.repaint();                protected void paintComponent(Graphics g)            if(da

93、y=select.get(Calendar.DAY_OF_MONTH)&&                    month=select.get(Calendar.MONTH)                /如果當(dāng)前日期

94、是選擇日期,則高亮顯示                g.setColor(new Color(160,185,215);                g.fillRect(0,0,getWidth(),getHeight();    &

95、#160;                   if(year=now.get(Calendar.YEAR)&&                    month=now.get(Calenda

96、r.MONTH)&&                    day=now.get(Calendar.DAY_OF_MONTH)                /如果日期和當(dāng)前日期一樣,則用紅框  

97、60;             Graphics2D gd=(Graphics2D)g;                gd.setColor(Color.RED);            

98、    Polygon p=new Polygon();                p.addPoint(0,0);                p.addPoint(getWidth()-1,0);   

99、;             p.addPoint(getWidth()-1,getHeight()-1);                p.addPoint(0,getHeight()-1);         

100、0;      gd.drawPolygon(p);                        if(isSelected)/如果被選中了就畫出一個虛線框出來           

101、60;    Stroke s=new BasicStroke(1.0f,BasicStroke.CAP_SQUARE,                        BasicStroke.JOIN_BEVEL,1.0f,new float2.0f,2.0f,1.0f);    

102、;            Graphics2D gd=(Graphics2D)g;                gd.setStroke(s);              

103、60; gd.setColor(Color.BLACK);                Polygon p=new Polygon();                p.addPoint(0,0);     

104、0;          p.addPoint(getWidth()-1,0);                p.addPoint(getWidth()-1,getHeight()-1);            

105、0;   p.addPoint(0,getHeight()-1);                gd.drawPolygon(p);                       

106、 super.paintComponent(g);                public boolean contains(Point p)            return this.getBounds().contains(p);     

107、0;          private void update()            repaint();                public void mouseClicked(MouseEvent e)

108、                        public void mousePressed(MouseEvent e)             isSelected=true;     

109、;       update();                        public void mouseReleased(MouseEvent e)           

110、0; Point p=SwingUtilities.convertPoint(this,e.getPoint(),jp3);            lm.setSelect(p,false);            commit();         

111、0;              public void mouseEntered(MouseEvent e)                         public void mouseExited(MouseEv

112、ent e)                         public void mouseDragged(MouseEvent e)             Point p=SwingUtilities.convertPoint(th

113、is,e.getPoint(),jp3);            lm.setSelect(p,true);                        public void mouseMoved(MouseEvent e)  

114、;                       public int compare(MyLabel o1, MyLabel o2)             Calendar c1=Calendar.getInstance();  

115、;          c1.set(o1.year,o2.month,o1.day);            Calendar c2=Calendar.getInstance();            c2.set(o2.year,o2.month,o2.d

116、ay);            return pareTo(c2);                private class LabelManager        private List list;   

117、     public LabelManager()            list=new ArrayList();                public List getLabels()      &

118、#160;     return list;                public void addLabel(MyLabel my)            list.add(my);      

119、0;         public void clear()            list.clear();                public void setSelect(MyLabel my,boolean b)&

120、#160;           for(MyLabel m:list)                if(m.equals(my)                

121、60;   m.setSelected(true,b);                else                    m.setSelected(false,b);  &#

122、160;                                         public void setSelect(Point p,boolean b) 

123、0;          /如果是拖動,則要優(yōu)化一下,以提高效率            if(b)                /表示是否能返回,不用比較完所有的標(biāo)簽,能返回的標(biāo)志就是把上一個標(biāo)簽和  

124、;              /將要顯示的標(biāo)簽找到了就可以了                boolean findPrevious=false,findNext=false;          &#

125、160;     for(MyLabel m:list)                    if(m.contains(p)                  

126、60;     findNext=true;                        if(m.getIsSelected()               

127、;             findPrevious=true;                        else         &

128、#160;                  m.setSelected(true,b);                           

129、60;                else if(m.getIsSelected()                        findPrevious=true;  &#

130、160;                     m.setSelected(false,b);                        

131、60;               if(findPrevious&&findNext)                        return;   

132、0;                                            else     

133、           MyLabel temp=null;                for(MyLabel m:list)                 

134、;   if(m.contains(p)                        temp=m;                   

135、 else if(m.getIsSelected()                        m.setSelected(false,b);                 

136、                                   if(temp!=null)                

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論