⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datechooser.java

📁 按钮选择日期
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * DateChooser.java
 *
 * Created on 2007年8月22日, 下午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;
    /**
     * Creates a new instance of DateChooser
     */
    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 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.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()));
        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,showDate.getHeight());
        SwingUtilities.convertPointToScreen(show,showDate);
        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.setForeground(Color.BLACK);
                }
                public void mousePressed(MouseEvent me){
                    select.add(Calendar.MONTH,1);
                    right.setForeground(Color.WHITE);
                    refresh();
                }
                public void mouseReleased(MouseEvent me){
                    right.setForeground(Color.BLACK);
                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -