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

📄 datechooser.java

📁 按钮选择日期
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            });
        }
        private void updateDate(){
            center.setText(select.get(Calendar.YEAR)+"年"+(select.get(Calendar.MONTH)+1)+"月");
        }
    }
    private class JP2 extends JPanel{
        public JP2(){
            this.setPreferredSize(new Dimension(295,20));
        }
        protected void paintComponent(Graphics g){
            g.setFont(font);
            g.drawString("星期日 星期一 星期二 星期三 星期四 星期五 星期六",5,10);
            g.drawLine(0,15,getWidth(),15);
        }
    }
    private class JP3 extends JPanel{
        public JP3(){
            super(new GridLayout(6,7));
            this.setPreferredSize(new Dimension(295,100));
            initJP3();
        }
        private void initJP3(){
            updateDate();
        }
        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(Calendar.DAY_OF_WEEK);
            int sum=(index==1?8:index);
            select.add(Calendar.DAY_OF_MONTH,0-sum);
            for(int i=0;i<42;i++){
                select.add(Calendar.DAY_OF_MONTH,1);
                lm.addLabel(new MyLabel(select.get(Calendar.YEAR),
                        select.get(Calendar.MONTH),select.get(Calendar.DAY_OF_MONTH)));
            }
            for(MyLabel my:lm.getLabels()){
                this.add(my);
            }
            select.setTime(temp);
        }
    }
    private class MyLabel extends JLabel implements Comparator<MyLabel>,
            MouseListener,MouseMotionListener{
        private int year,month,day;
        private boolean isSelected;
        public MyLabel(int year,int month,int day){
            super(""+day,JLabel.CENTER);
            this.year=year;
            this.day=day;
            this.month=month;
            this.addMouseListener(this);
            this.addMouseMotionListener(this);
            this.setFont(font);
            if(month==select.get(Calendar.MONTH)){
                this.setForeground(Color.BLACK);
            }else{
                this.setForeground(Color.LIGHT_GRAY);
            }
            if(day==select.get(Calendar.DAY_OF_MONTH)){
                this.setBackground(new Color(160,185,215));
            }else{
                this.setBackground(Color.WHITE);
            }
        }
        public boolean getIsSelected(){
            return isSelected;
        }
        public void setSelected(boolean b,boolean isDrag){
            isSelected=b;
            if(b&&!isDrag){
                int temp=select.get(Calendar.MONTH);
                select.set(year,month,day);
                if(temp==month){
                    SwingUtilities.updateComponentTreeUI(jp3);
                }else{
                    refresh();
                }
            }
            this.repaint();
        }
        protected void paintComponent(Graphics g){
            if(day==select.get(Calendar.DAY_OF_MONTH)&&
                    month==select.get(Calendar.MONTH)){
                //如果当前日期是选择日期,则高亮显示
                g.setColor(new Color(160,185,215));
                g.fillRect(0,0,getWidth(),getHeight());
            }
            if(year==now.get(Calendar.YEAR)&&
                    month==now.get(Calendar.MONTH)&&
                    day==now.get(Calendar.DAY_OF_MONTH)){
                //如果日期和当前日期一样,则用红框
                Graphics2D gd=(Graphics2D)g;
                gd.setColor(Color.RED);
                Polygon p=new Polygon();
                p.addPoint(0,0);
                p.addPoint(getWidth()-1,0);
                p.addPoint(getWidth()-1,getHeight()-1);
                p.addPoint(0,getHeight()-1);
                gd.drawPolygon(p);
            }
            if(isSelected){//如果被选中了就画出一个虚线框出来
                Stroke s=new BasicStroke(1.0f,BasicStroke.CAP_SQUARE,
                        BasicStroke.JOIN_BEVEL,1.0f,new float[]{2.0f,2.0f},1.0f);
                Graphics2D gd=(Graphics2D)g;
                gd.setStroke(s);
                gd.setColor(Color.BLACK);
                Polygon p=new Polygon();
                p.addPoint(0,0);
                p.addPoint(getWidth()-1,0);
                p.addPoint(getWidth()-1,getHeight()-1);
                p.addPoint(0,getHeight()-1);
                gd.drawPolygon(p);
            }
            super.paintComponent(g);
        }
        public boolean contains(Point p){
            return this.getBounds().contains(p);
        }
        private void update(){
            repaint();
        }
        public void mouseClicked(MouseEvent e) {
        }
        
        public void mousePressed(MouseEvent e) {
            isSelected=true;
            update();
        }
        
        public void mouseReleased(MouseEvent e) {
            Point p=SwingUtilities.convertPoint(this,e.getPoint(),jp3);
            lm.setSelect(p,false);
            commit();
        }
        
        public void mouseEntered(MouseEvent e) {
        }
        
        public void mouseExited(MouseEvent e) {
        }
        
        public void mouseDragged(MouseEvent e) {
            Point p=SwingUtilities.convertPoint(this,e.getPoint(),jp3);
            lm.setSelect(p,true);
        }
        
        public void mouseMoved(MouseEvent e) {
        }
        
        public int compare(MyLabel o1, MyLabel o2) {
            Calendar c1=Calendar.getInstance();
            c1.set(o1.year,o2.month,o1.day);
            Calendar c2=Calendar.getInstance();
            c2.set(o2.year,o2.month,o2.day);
            return c1.compareTo(c2);
        }
    }
    private class LabelManager{
        private List<MyLabel> list;
        public LabelManager(){
            list=new ArrayList<MyLabel>();
        }
        public List<MyLabel> getLabels(){
            return list;
        }
        public void addLabel(MyLabel my){
            list.add(my);
        }
        public void clear(){
            list.clear();
        }
        public void setSelect(MyLabel my,boolean b){
            for(MyLabel m:list){
                if(m.equals(my)){
                    m.setSelected(true,b);
                }else{
                    m.setSelected(false,b);
                }
            }
        }
        public void setSelect(Point p,boolean b){
            //如果是拖动,则要优化一下,以提高效率
            if(b){
                //表示是否能返回,不用比较完所有的标签,能返回的标志就是把上一个标签和
                //将要显示的标签找到了就可以了
                boolean findPrevious=false,findNext=false;
                for(MyLabel m:list){
                    if(m.contains(p)){
                        findNext=true;
                        if(m.getIsSelected()){
                            findPrevious=true;
                        }else{
                            m.setSelected(true,b);
                        }
                    }else if(m.getIsSelected()){
                        findPrevious=true;
                        m.setSelected(false,b);
                    }
                    if(findPrevious&&findNext){
                        return;
                    }
                }
            }else{
                MyLabel temp=null;
                for(MyLabel m:list){
                    if(m.contains(p)){
                        temp=m;
                    }else if(m.getIsSelected()){
                        m.setSelected(false,b);
                    }
                }
                if(temp!=null){
                    temp.setSelected(true,b);
                }
            }
        }
        
    }
    private class JP4 extends JPanel{
        public JP4(){
            super(new BorderLayout());
            this.setPreferredSize(new Dimension(295,20));
            this.setBackground(new Color(160,185,215));
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
            final JLabel jl=new JLabel("今天: "+sdf.format(new Date()));
            jl.setToolTipText("点击回到今天日期");
            this.add(jl,BorderLayout.CENTER);
            jl.addMouseListener(new MouseAdapter(){
                public void mouseEntered(MouseEvent me){
                    jl.setCursor(new Cursor(Cursor.HAND_CURSOR));
                    jl.setForeground(Color.RED);
                }
                public void mouseExited(MouseEvent me){
                    jl.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
                    jl.setForeground(Color.BLACK);
                }
                public void mousePressed(MouseEvent me){
                    jl.setForeground(Color.WHITE);
                    select.setTime(new Date());
                    refresh();
                    commit();
                }
                public void mouseReleased(MouseEvent me){
                    jl.setForeground(Color.BLACK);
                }
            });
        }
    }
    public static void main(String[] args) {
        final DateChooser mp=new DateChooser();
        JFrame jf=new JFrame("test");
        jf.add(mp,BorderLayout.CENTER);
        jf.add(new JButton("测试用的"),BorderLayout.NORTH);
        jf.pack();
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

⌨️ 快捷键说明

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