用JTree类实现日历

来源:互联网 发布:知乎 北京 中科院 编辑:程序博客网 时间:2024/06/05 01:55

JTree负责创建树,树以垂直方式显示数据,每行显示一个节点。树中只有一个根节点,其他所有节点都从其引出。除根节点外,其他节点分两类,一类是带子节点的分支节点,一类是不带子节点的叶子节点。每个节点关联着一个描述该节点的文本标签和图像图标,文本标签是节点的字符串表示,图标指明该节点是否为叶子节点。

使用DefaultMutableTreeNode类为其创建节点,常用构造方法为:

DefaultMutableTreeNode(Object userObject);//创建可以有子节点的节点,可用add方法添加其他节点为其子节点

DefaultMutableTreeNode(Object userObject,boolean allowChildren);//使用setAllowsChildren(boolean b)方法来设置是否允许其有子节点

树的节点可以发生选择事件,即用鼠标单击节点。可用addTreeSelectionLIstener(TreeSelectionListener)方法注册监视器

树可通过getLsatSelectedPathComponent()方法获取

getLastSelectPathComponent():返回此路径的最后一个组件,对DefaultTreeModel返回的路径,它将返回一个TreeNode实例。

import java.util.Calendar;public class CalendarBean {int year=2010,month=0,nextday;public void setyear(int year){this.year=year;}public void setmonth(int month){this.month=month;}public String[][] getCalendar(){String a[][]=new String[6][7];Calendar calendar=Calendar.getInstance();calendar.set(year, month-1, 1);int DayOfWeek=calendar.get(calendar.DAY_OF_WEEK)-1;int day=0;if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)day=31;if(month==4||month==6||month==9||month==11)day=30;if(month==2){if(year%4==0&&year%100==0||year%400==0)day=29;else day=28;}nextday=1;for(int i=0;i<6;i++){if( i==0)for(int j=DayOfWeek;j<6;j++){a[i][j]=""+nextday;nextday++;}elsefor(int k=0;k<7&&nextday<=day;k++){a[i][k]=""+nextday;nextday++;}}return a;}}

import java.awt.BorderLayout;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.util.Calendar;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTable;import javax.swing.JTree;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import javax.swing.tree.DefaultMutableTreeNode;public class windowcalendar extends JFrame implements ItemListener, TreeSelectionListener {JTable table;JScrollPane scrolltable,scrolltree;JSplitPane split;int year,month;JTree tree;String rili[][];JComboBox yearlist;DefaultMutableTreeNode root;CalendarBean calendar;Object name[]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};String item[]={"2015","2016","2017","2018","2019","2020","2021"};windowcalendar(){init();setBounds(100, 100, 300, 200);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}void init(){yearlist=new JComboBox<>();for(int i=0;i<item.length;i++){yearlist.addItem(item[i]);}yearlist.addItemListener(this);root=new DefaultMutableTreeNode(item[0]);year=Integer.parseInt(item[0]);month=1;calendar=new CalendarBean();DefaultMutableTreeNode MONTH[]=new DefaultMutableTreeNode[13];for(int j=1;j<=12;j++){MONTH[j]=new DefaultMutableTreeNode(""+j);root.add(MONTH[j]);}tree=new JTree(root);add(new JScrollPane(tree),BorderLayout.WEST);tree.addTreeSelectionListener(this);calendar.setyear(year);calendar.setmonth(month);    rili=calendar.getCalendar();table=new JTable(rili,name);scrolltree=new JScrollPane(tree);scrolltable=new JScrollPane(table);split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,scrolltree,scrolltable);split.setDividerLocation(0.5);add(yearlist,BorderLayout.NORTH);add(split,BorderLayout.SOUTH);}public void valueChanged(TreeSelectionEvent e) {DefaultMutableTreeNode monthnode=(DefaultMutableTreeNode) tree.getLastSelectedPathComponent();if(monthnode.isLeaf()){month=Integer.parseInt(monthnode.toString().trim());calendar.setmonth(month);rili=calendar.getCalendar();split.remove(scrolltable);table=new JTable(rili,name);scrolltable=new JScrollPane(table);split.add(scrolltable, JSplitPane.RIGHT);}}@Overridepublic void itemStateChanged(ItemEvent e) {String YEAR=yearlist.getSelectedItem().toString().trim();year=Integer.parseInt(YEAR);calendar.setyear(year);root=new DefaultMutableTreeNode(YEAR);DefaultMutableTreeNode MONTH[]=new DefaultMutableTreeNode[13];for(int i=1;i<=12;i++){MONTH[i]=new DefaultMutableTreeNode(""+i);root.add(MONTH[i]);}split.remove(scrolltree);tree=new JTree(root);tree.addTreeSelectionListener(this);scrolltree=new JScrollPane(tree);split.add(scrolltree,JSplitPane.LEFT);}}

public class Main {public static void main(String[] args) {windowcalendar w=new windowcalendar();}}


原创粉丝点击