




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初級烹調(diào)考試題及答案
- 分級檢驗考試題及答案
- 谷歌運營面試題庫及答案
- 方城醫(yī)療面試題及答案
- T/CAEPI 62-2023顆?;钚蕴课?氮氣脫附溶劑回收裝置技術(shù)要求
- T/CAEPI 24-2019袋式除塵用超細(xì)面層濾料技術(shù)要求
- 《小學(xué)美術(shù)新課標(biāo)》心得體會模版
- T/CADBM 7-2018墻布
- 定制家具定貨合同范本
- 個人商鋪轉(zhuǎn)讓合同范本
- 2024年版-生產(chǎn)作業(yè)指導(dǎo)書SOP模板
- 歷年考研英語一真題及答案
- 寵物殯葬師理論知識考試題庫50題
- 飛花令“水”的詩句100首含“水”字的詩句大全
- 門診常見眼科病
- 保育師中級培訓(xùn)課件資源
- 心力衰竭病人的護理課件
- 教學(xué)機房規(guī)劃方案
- 腫瘤患者全程管理
- 可行性研究報告編制服務(wù)投標(biāo)方案
- 大學(xué)生如何處理學(xué)習(xí)與娛樂的平衡
評論
0/150
提交評論