反射妙用:超強通用年月日樹 (轉)
在實際項目中,大家都要都有很多需要通過日期進行管理的數據,比如單據,考勤,日志等等。。。??? 這些數據對象都有一個共同的特點就是有一個字段是日期型。???? 于是我就利用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?
??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?
?
posted on 2007-01-12 14:44 liaojiyong 閱讀(285) 評論(0) 編輯 收藏 所屬分類: Java