反射妙用:超强通用年月日树 (轉)

本文介绍了一种使用Java反射机制构建的通用年月日树结构,适用于RCP插件项目,并可轻松调整用于WEB项目。该算法能根据指定的日期字段为数据对象创建层次化的树形视图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在实际项目中,大家都要都有很多需要通过日期进行管理的数据,比如单据,考勤,日志等等。。。    这些数据对象都有一个共同的特点就是有一个字段是日期型。
     于是我就利用JAVA的反射机制,写了一个通用年月日树。
是用在RCP插件项目中的。稍加改造也能用到WEB项目中,核心算法不变。

  1 import java.lang.reflect.Field;
  2 import
 java.util.Calendar;
  3 import
 java.util.Date;
  4 import
 java.util.List;
  5 import
 org.eclipse.swt.SWT;
  6 import
 org.eclipse.swt.graphics.Image;
  7 import
 org.eclipse.swt.widgets.Tree;
  8 import
 org.eclipse.swt.widgets.TreeItem;
  9 

 10 public class GetYMDTree {
 11 

 12     private static Image nodeImg = Activator.getImageDescriptor("icons/node.png").createImage();
 13 

 14     private static Image yearImg = Activator.getImageDescriptor("icons/year.png").createImage();
 15 

 16     private static Image monthImg = Activator.getImageDescriptor("icons/month.png").createImage();
 17 

 18     private static Image dayImg = Activator.getImageDescriptor("icons/day.png").createImage();
 19 

 20     
 21 

 22     public static void buildTree(List list, TreeItem tree, String dateField, String nameField) {
 23 
        tree.removeAll();
 24         if (list != null && list.size() > 0
) {
 25             String year = ""
;
 26             String month = ""
;
 27             String day = ""
;
 28             Object objt = list.get(0
);
 29             Field dateF = null
;
 30             Field nameF = null
;
 31             try
 {
 32                 dateF =
 objt.getClass().getDeclaredField(dateField);
 33                 dateF.setAccessible(true
);
 34                 nameF =
 objt.getClass().getDeclaredField(nameField);
 35                 nameF.setAccessible(true
);
 36             } catch
 (SecurityException e) {
 37 
                e.printStackTrace();
 38 
                tree.removeAll();
 39                 return
;
 40             } catch
 (NoSuchFieldException e) {
 41 
                e.printStackTrace();
 42 
                tree.removeAll();
 43                 return
;
 44 
            }
 45             for
 (Object obj : list) {
 46                 Calendar calendar =
 Calendar.getInstance();
 47                 String name = null
;
 48                 try
 {
 49 
                    calendar.setTime((Date) dateF.get(obj));
 50                     name =
 (String) nameF.get(obj);
 51                 } catch
 (IllegalArgumentException e) {
 52 
                    e.printStackTrace();
 53 
                    tree.removeAll();
 54                     return
;
 55                 } catch
 (IllegalAccessException e) {
 56 
                    e.printStackTrace();
 57 
                    tree.removeAll();
 58                     return
;
 59 
                }
 60                 if
 (year.equals(Integer.toString(calendar.get(Calendar.YEAR)))) {
 61                     if (month.equals(Integer.toString(calendar.get(Calendar.MONTH) + 1
))) {
 62                         if
 (day.equals(Integer.toString(calendar.get(Calendar.DATE)))) {
 63                             TreeItem et = new TreeItem(tree.getItem(tree.getItemCount() - 1
).getItem(
 64                                     tree.getItem(tree.getItemCount() - 1).getItemCount() - 1
)
 65 
                                    .getItem(
 66                                             tree.getItem(tree.getItemCount() - 1
).getItem(
 67                                                     tree.getItem(tree.getItemCount() - 1).getItemCount() - 1
)
 68                                                     .getItemCount() - 1
), SWT.NONE);
 69 
                            et.setText(name);
 70 
                            et.setData(obj);
 71 
                            et.setImage(nodeImg);
 72                         } else
 {
 73                             day =
 Integer.toString(calendar.get(Calendar.DATE));
 74                             TreeItem dt = new TreeItem(tree.getItem(tree.getItemCount() - 1
).getItem(
 75                                     tree.getItem(tree.getItemCount() - 1).getItemCount() - 1
), SWT.NONE);
 76 
                            dt.setText(day);
 77 
                            dt.setImage(dayImg);
 78 
                            dt.setData(day);
 79                             TreeItem et = new
 TreeItem(dt, SWT.NONE);
 80 
                            et.setText(name);
 81 
                            et.setData(obj);
 82 
                            et.setImage(nodeImg);
 83 
                        }
 84                     } else
 {
 85                         month = Integer.toString(calendar.get(Calendar.MONTH) + 1
);
 86                         day =
 Integer.toString(calendar.get(Calendar.DATE));
 87                         TreeItem mt = new TreeItem(tree.getItem(tree.getItemCount() - 1
), SWT.NONE);
 88 
                        mt.setText(month);
 89 
                        mt.setImage(monthImg);
 90 
                        mt.setData(month);
 91                         mt.setExpanded(true
);
 92                         TreeItem dt = new
 TreeItem(mt, SWT.NONE);
 93 
                        dt.setText(day);
 94 
                        dt.setImage(dayImg);
 95 
                        dt.setData(day);
 96                         TreeItem et = new
 TreeItem(dt, SWT.NONE);
 97 
                        et.setText(name);
 98 
                        et.setData(obj);
 99 
                        et.setImage(nodeImg);
100 
                    }
101                 } else
 {
102                     year =
 Integer.toString(calendar.get(Calendar.YEAR));
103                     month = Integer.toString(calendar.get(Calendar.MONTH) + 1
);
104                     day =
 Integer.toString(calendar.get(Calendar.DATE));
105                     TreeItem yt = new
 TreeItem(tree, SWT.NONE);
106 
                    yt.setText(year);
107 
                    yt.setImage(yearImg);
108 
                    yt.setData(year);
109                     TreeItem mt = new
 TreeItem(yt, SWT.NONE);
110 
                    mt.setText(month);
111 
                    mt.setImage(monthImg);
112 
                    mt.setData(month);
113                     mt.setExpanded(true
);
114                     TreeItem dt = new
 TreeItem(mt, SWT.NONE);
115 
                    dt.setText(day);
116 
                    dt.setImage(dayImg);
117 
                    dt.setData(day);
118                     TreeItem et = new
 TreeItem(dt, SWT.NONE);
119 
                    et.setText(name);
120 
                    et.setData(obj);
121 
                    et.setImage(nodeImg);
122                     yt.setExpanded(true
);
123 
                }
124 
            }
125 
        }
126 
    }
127 

128 
129 
130     public static Image getDayImg() {
131         return
 dayImg;
132 
    }
133 

134 
135 
136     public static void setDayImg(Image dayImg) {
137         GetYMDTree.dayImg =
 dayImg;
138 
    }
139 

140 
141 
142     public static Image getMonthImg() {
143         return
 monthImg;
144 
    }
145 

146 
147 
148     public static void setMonthImg(Image monthImg) {
149         GetYMDTree.monthImg =
 monthImg;
150 
    }
151 

152 
153 
154     public static Image getNodeImg() {
155         return
 nodeImg;
156 
    }
157 

158 
159 
160     public static void setNodeImg(Image nodeImg) {
161         GetYMDTree.nodeImg =
 nodeImg;
162 
    }
163 

164 
165 
166     public static Image getYearImg() {
167         return
 yearImg;
168 
    }
169 

170 
171 
172     public static void setYearImg(Image yearImg) {
173         GetYMDTree.yearImg =
 yearImg;
174 
    }
175 
}
176 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值