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

来源:互联网 发布:换手机壁纸的软件 编辑:程序博客网 时间:2024/06/05 15:14

 

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

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

/**//* 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();
    }

}

本文出自:冯立彬的博客