一个java实现的简单日历,采用左树右列表的方式实现,具有参考意义

               

 

在论坛里面看到的,觉得挺好,具有参考价值。

直接将两个文件放在一起就可以运行。

/**/ /* File CalendarBean.java
*  author:***
*  Date:2007-12-8 23:37
*  返回某年某月的日历的字符串数组
*/

import  java.util.Calendar;
public   class  CalendarBean ... {
    int year = 2007,month = 0;
    private int monthDays[] = ...{31,28,31,30,31,30,31,31,30,31,30,31};
    
    //设置年份
    public void setYear(int year)...{
        this.year = year;
    }

    
    //获取年份
    public int getYear()...{
        return year;
    }

    
    //设置月份
    public void setMonth(int month)...{
        this.month = month > 0 ? month : 1;        
    }

    
    //获取月份
    public int getMonth()...{
        return month;
    }

    
    //判断是否为闰年
    private static boolean isLeap(int year)...{
        return ((year % 4 == 0) && (year %100 == 0)) || (year % 400 == 0);
    }

    
    //获得当前年月的日历所组成字符串数组
    public String[][] getCalendar()...{
        String data[][] = new String[6][7];
        
        Calendar cale = Calendar.getInstance();
        cale.set(year, month -1 ,1);

        //该月1号是星期几
        int weekDay = cale.get(Calendar.DAY_OF_WEEK) - 1;
        
        //该月的天数
        int day = monthDays[month - 1];
        if(month == 2 && isLeap(year)) day = 29;
        
        int nextDay = 1;
        
        //添加字符串数组
        for(int k = 0 ; k < 6; k++)...{
            if( k == 0)
                for(int j = weekDay; j < 7;j++)...{
                    data[k][j] = " " + nextDay;
                    nextDay++;
                }

            else 
                for(int j = 0 ; j < 7 && nextDay <= day; j++)...{
                    data[k][j] = " " + nextDay;
                    nextDay++;
                }

        }

        return data;
    }

    
}

 

/**/ /* File CalenderFrame.java
*  author:***
*  Date:2007-12-8 23:37
*  一个简单的日历
*/

import  javax.swing. * ;
import  javax.swing.tree. * ;
import  java.awt. * ;
import  java.awt.event. * ;
import  javax.swing.event. * ;

public   class  CalenderFrame  extends  JFrame  implements  ItemListener, TreeSelectionListener ... {
    JTable table;
    JTree tree = null;
    DefaultMutableTreeNode root;
    Object name[] = ...{"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
    JComboBox yearList;
    CalendarBean cale;
    String rili[][];
    String item[] = ...{"2006","2007","2008","2009","2010"};
    JSplitPane split;
    int year = 2006;
    int month = 0;
    JScrollPane scrollTree,scrollTable;
    
    public CalenderFrame()...{
        cale = new CalendarBean();
        
        //添加年份列表
        yearList = new JComboBox();
        for(int k = 0 ; k < item.length;k++)
            yearList.addItem(item[k]);
        yearList.addItemListener(this);
        
        //添加月份树
        root = new DefaultMutableTreeNode(item[0]);
        tree = new JTree(root);
        add(new JScrollPane(tree) , BorderLayout.WEST);
        tree.addTreeSelectionListener(this);
        
        //设置年月及该月日历
        cale.setYear(year);
        cale.setMonth(month);
        rili = cale.getCalendar();
        table = new JTable(rili,name);
        
        //添加到窗口
        scrollTree = new JScrollPane(tree);
        scrollTable = new JScrollPane(table);
        split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,scrollTree,scrollTable);
        add(yearList,BorderLayout.NORTH);
        add(split , BorderLayout.CENTER);
        updateYear(year);
        
        //设置窗口属性
        setSize(580,350);
        setVisible(true);
        split.setDividerLocation(0.5);
        validate();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    
    //更新年份及月份树
    private void updateYear(int year)...{
        cale.setYear(year);
        root = new DefaultMutableTreeNode(String.valueOf(year));
        
        DefaultMutableTreeNode months[] = new DefaultMutableTreeNode[13];
        for(int i = 0 ; i <12;i++)...{
            months[i] = new DefaultMutableTreeNode("" + (i+1));
            root.add(months[i]);
        }

        split.remove(scrollTree);
        tree = new JTree(root);
        tree.addTreeSelectionListener(this);
        scrollTree = new JScrollPane(tree);
        split.add(scrollTree , JSplitPane.LEFT);
        split.setDividerLocation(0.5);
        validate();
    }

    
    //年份列表的监听器 
    public void itemStateChanged(ItemEvent e)...{
        String yearStr = yearList.getSelectedItem().toString().trim();
        int year = Integer.parseInt(yearStr);

        updateYear(year);
    }

    
    //树结点的监听器
    public void valueChanged(TreeSelectionEvent e)...{
        DefaultMutableTreeNode monthNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
        if(monthNode.isLeaf())...{
            month = Integer.parseInt(monthNode.toString().trim());
            cale.setMonth(month);
            rili = cale.getCalendar();
            split.remove(scrollTable);
            table = new JTable(rili,name);
            scrollTable = new JScrollPane(table);
            split.add(scrollTable, JSplitPane.RIGHT);
            split.setDividerLocation(0.5);
            validate();
            System.out.println("validate ok");
        }

        
    }

    
    public static void main(String args[])...{
        new CalenderFrame();
    }

}

本文出自:冯立彬的博客



           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值