安徽新华电脑专修学院_安徽电脑培训_安徽电脑培训学校_合肥电脑培训

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 使用Annotation以1行代碼完成一個TableViewer

使用Annotation以1行代碼完成一個TableViewer
2010-01-14 23:13:47  作者:  來源:
最近一直在找一個方便的SWT開發方法...但是還是陷入了寫一個TableViewer就得200多行(包括 Table ContentProvider...Sorter..)等等..也用了些設計模式,不過還是要寫很多,這件事情真讓人沮喪。昨天想到用注解( Annotation)嘗試著完成這個工作,今天早晨就開始做了,終于一天的時間把它做了出來,效果十分令人滿意,本來200多行的代碼現在變成了3行..我從來沒想過TableViewer可以那么容易的創建,確實反射機制給java增添了無限的擴展^^


好的下面展示一下用這個工具編寫一個TableViewer的

清單1 DTO 在get方法上做的注解最終將被用作創建TableViewer
Java代碼 復制代碼
  1. package solonote.common.swt.test;   
  2.   
  3. import java.util.Date;   
  4.   
  5. import solonote.common.swt.table.ColumnAnnotation;   
  6.   
  7. /**  
  8.  * 測試用的DTO  
  9.  * @author solonote  
  10.  * @version 0.1.0 2007-12-17 下午07:40:28  
  11.  */  
  12. public class TestDTO{   
  13.   
  14.     private String string;   
  15.        
  16.     private Date date;   
  17.        
  18.     private int integer;   
  19.        
  20.     @ColumnAnnotation(   
  21.             header = "字符", index = 0, imageBundleId = "solonote.common.swt",   
  22.             imangURL = "/icon/hourglass.png", width = 120)   
  23.     public String getString() {   
  24.         return string;   
  25.     }   
  26.   
  27.     public void setString(String string) {   
  28.         this.string = string;   
  29.     }   
  30.   
  31.   
  32.     @ColumnAnnotation(   
  33.         header = "日期", index = 1,   
  34.         imangURL = "icon/error.png", width = 180)          
  35.     public Date getDate() {   
  36.         return date;   
  37.     }   
  38.   
  39.     public void setDate(Date date) {   
  40.         this.date = date;   
  41.     }   
  42.   
  43.     @ColumnAnnotation(   
  44.             header = "數字", index = 2,   
  45.             imangURL = "icon/a.png", isSort = false,    
  46.             width = 100)   
  47.     public int getInteger() {   
  48.         return integer;   
  49.     }   
  50.   
  51.     public void setInteger(int integer) {   
  52.         this.integer = integer;   
  53.     }   
  54. }  


清單2 執行程序
Java代碼 復制代碼
  1. package solonote.common.swt.test;   
  2.   
  3. import java.util.Date;   
  4.   
  5. import org.eclipse.jface.viewers.TableViewer;   
  6. import org.eclipse.swt.SWT;   
  7. import org.eclipse.swt.layout.FillLayout;   
  8. import org.eclipse.swt.widgets.Display;   
  9. import org.eclipse.swt.widgets.Shell;   
  10. import org.eclipse.swt.widgets.Table;   
  11.   
  12. import solonote.common.swt.table.TableRender;   
  13.   
  14. public class TestTable {   
  15.   
  16.     public static void main(String[] args) throws Exception {   
  17.         final Display display = Display.getDefault();   
  18.         final Shell shell = new Shell();   
  19.         shell.setLayout(new FillLayout());   
  20.         shell.setSize(420375);   
  21.         shell.setText("SWT Application");   
  22.         shell.open();   
  23.         //定義表格   
  24.         Table table = new Table(shell, SWT.FULL_SELECTION | SWT.BORDER);   
  25.         table.setLinesVisible(true);   
  26.         table.setHeaderVisible(true);   
  27.            
  28.         //一行代碼創建TableViewer   
  29.         TableViewer tableViewer =TableRender.renderTable(table, TestDTO.class);   
  30.         //定義表格結束   
  31.            
  32.         //定義數據   
  33.         TestDTO dto1 = new TestDTO();   
  34.         dto1.setString("bbc");   
  35.         dto1.setDate(new Date());   
  36.         dto1.setInteger(13);   
  37.            
  38.         TestDTO dto2 = new TestDTO();   
  39.         dto2.setString("abc");   
  40.         dto2.setDate(new Date(dto1.getDate().getTime() + 800));   
  41.         dto2.setInteger(11);   
  42.         tableViewer.setInput(new TestDTO[]{dto1,dto2});   
  43.                
  44.         shell.layout();   
  45.         while (!shell.isDisposed()) {   
  46.             if (!display.readAndDispatch())   
  47.                 display.sleep();   
  48.         }   
  49.     }   
  50.   
  51. }  


好的,運用的設計模式什么都直接看doc和源代碼吧 注釋很全的,

自己認為這個工具還是可以幫助你的,需要更強大的功能請自己擴展,

這個小工具在此GPL3下開源 http://www.gnu.org/licenses/gpl-3.0.txt

看懂源代碼您還需要以下知識:

Swt Jface 關于Table和TableViewer的知識

Annotation的知識

關于java反射機制的知識

設計模式:工廠方法、策略模式、適配器模式

轉載請附帶此bolg文章的鏈接,感謝

20071218 10:44 增加了對每一列的位置控制,將注解由原來的字段上移到了get方法上,增加了一個類使得創建只需要1行代碼了

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 上海希喆机械有限公司-Schunk雄克,雄克卡盘, 雄克机械手, B+R贝加莱, ELCIS编码器,艾西斯编码器, TWK编码器,Nexen,Joyce dayton升降机,Thomson汤姆森,TPG减速机,INA导轨。 | 郫都人才网_郫都招聘网_求职找工作平台 | 压痕机_自动拆标机_瑞安市晨力机械有限公司| 南京仁康体检--南京仁康门诊部有限公司 | 神马影院电影网_实时更新秒播电视剧、电影、动漫的网站 _ 神马影院 | 全铝家居_十大全铝家具品牌_全铝衣柜橱柜——佛山欧格美铝业 | 阻垢剂|缓蚀剂|杀菌剂|分散剂|水处理剂|印染助剂|水处理药剂|造纸助剂|膜阻垢剂|缓蚀剂|HEDP|ATMP|螯合剂-山东凯瑞化学有限公司 水处理药剂生产厂家 | 兔展-H5页面制作、微信营销活动一站式企业营销数字化增长平台 | 太原塑料托盘,塑料筐,塑料箱,塑料垃圾桶_太原都程塑料制品有限公司 | 油漆颜料砂磨机,油墨水砂磨机,水性涂料砂磨机-常州市奥能达机械设备有限公司 | 热水工程|太阳能热水工程|空气能热水工程|太阳能集热工程 | 妙手官网—商品管理、批量修改、订单处理、营销水印 | 氧化膜测厚仪-瓶壁测厚仪-QNIX菲尼克斯膜厚仪-深圳市时代之峰科技有限公司 | 烧腊培训,广东有实力的烧腊培训[免费试吃],广式烧鸭培训-烧鹅培训-学烧腊选广州嘉政 | 聚丙烯酰胺,聚合氯化铝,重金属捕捉剂,污泥调理剂,活性氧化铝,生石灰,反渗透阻垢剂,工业葡萄糖,硫酸铝,果壳活性炭,柱状活性炭,蜂窝活性炭,石英砂,锰砂-北京雁归来环保科技有限公司-以真诚为立足之本,以质量为生存之本,愿与海内外同仁共创双赢。雁归来人一路走来,气贯长虹,勇锐盖过怯弱,进取压倒苟安!我们紧扣时代脉搏,专注水处理、继往开来! | 微型电磁阀_隔膜泵_活塞泵_微型水泵_微型真空泵_微型气泵【东莞市宗旨电子科技有限公司】 | 景德镇晶达新材料有限公司 | 上海熙隆光电科技有限公司-半导体激光器,一字线激光器,光纤耦合激光器,拉曼激光器 | 张家港起重搬运吊装,工厂设备搬运服务-张家港易源起重搬运有限公司 | 水溶肥料-大量元素水溶肥-含氨基酸水溶肥料-高塔复合肥-水溶肥生产厂家-河南中黄特肥科技有限责任公司 | 碳减排领域专业技能人才培养工程综合服务平台 | 湖南实验台-防静电工作台-实验设备厂家-长沙实验室设备有限公司-湖南贝塔实验室设备有限公司 | 木屑烘干机|酒糟烘干机|果渣烘干机_郑州东鼎机械 | 湖北高新技术企业认定申报|武汉高企认定代办|武汉项目申报首选 - 湖北创优企科技服务有限公司 | 每天一篇励志文章,每晚一个励志故事—励志人生网 | 陶瓷颗粒厂家_彩色路面_彩色陶瓷颗粒-山东顺驰道路材料有限公司 陶瓷复合钢管-专业提供江苏陶瓷钢管和陶瓷内衬复合钢管的生产厂家 | 企业旺旺-qy55.com| 煤泥烘干机,酒糟烘干机,药渣烘干机,酵母烘干机,烘干机厂家-瑞奥新能源 | 山东汇河环保科技集团有限公司,水囊水袋,水罐,油囊,预压水袋,吊重水袋_山东汇河环保科技集团有限公司,水囊水袋,水罐,油囊,预压水袋,吊重水袋 | 宜宾三江人才网_三江人才网_宜宾三江人才网_三江人才直聘网是本地颇具规模的网上人才市场 | 重庆监控-监控系统-大型弱电工程-重庆万建电子工程有限责任公司是智能化一级工程公司 | 京建鹏达_商用无烟烧烤设备多少钱|开店商用自助旋转烧烤炉价格|无烟电烧烤炉批发厂家|无烟烧烤桌定做厂商-京建鹏达烧烤设备网 | 望崖阁书法培训班-杭州书法高考培训班2023届招生简章-优清画院 | 郑州冷却塔_河南冷却塔-河南金创制冷设备有限公司 | 首页 菲律宾海运双清|马尼拉海运双清|广州菲律宾专线|广州通达供应链有限公司 | 首页 | 华源医药网 | 首页-青特集团官方网站 | 浙江桥梁检测车出租_杭州桥检车出租_桥梁检测车出租_桥检车租赁_桥梁检测车租赁-广州众诚设备租赁有限公司 | 远东齿轮泵|高粘度齿轮泵|三螺杆油泵|沥青保温泵|高粘度稠油泵-远东泵业官网 | 山东货架厂家,重型货架,阁楼货架,钢平台,板材货架-山东智造仓储设备有限公司 | 消防栓保温罩,玻璃钢灭火器箱,玻璃钢消防沙箱-潍坊辰阳玻璃钢有限公司 |