`
solonote
  • 浏览: 90036 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用Annotation以1行代码完成一个TableViewer

阅读更多
最近一直在找一个方便的SWT开发方法...但是还是陷入了写一个TableViewer就得200多行(包括 Table ContentProvider...Sorter..)等等..也用了些设计模式,不过还是要写很多,这件事情真让人沮丧。昨天想到用注解( Annotation)尝试着完成这个工作,今天早晨就开始做了,终于一天的时间把它做了出来,效果十分令人满意,本来200多行的代码现在变成了3行..我从来没想过TableViewer可以那么容易的创建,确实反射机制给java增添了无限的扩展^^


好的下面展示一下用这个工具编写一个TableViewer的

清单1 DTO 在get方法上做的注解最终将被用作创建TableViewer
package solonote.common.swt.test;

import java.util.Date;

import solonote.common.swt.table.ColumnAnnotation;

/**
 * 测试用的DTO
 * @author solonote
 * @version 0.1.0 2007-12-17 下午07:40:28
 */
public class TestDTO{

	private String string;
	
	private Date date;
	
	private int integer;
	
	@ColumnAnnotation(
			header = "字符", index = 0, imageBundleId = "solonote.common.swt",
			imangURL = "/icon/hourglass.png", width = 120)
	public String getString() {
		return string;
	}

	public void setString(String string) {
		this.string = string;
	}


	@ColumnAnnotation(
		header = "日期", index = 1,
		imangURL = "icon/error.png", width = 180)		
	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	@ColumnAnnotation(
			header = "数字", index = 2,
			imangURL = "icon/a.png", isSort = false, 
			width = 100)
	public int getInteger() {
		return integer;
	}

	public void setInteger(int integer) {
		this.integer = integer;
	}
}


清单2 执行程序
package solonote.common.swt.test;

import java.util.Date;

import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;

import solonote.common.swt.table.TableRender;

public class TestTable {

	public static void main(String[] args) throws Exception {
		final Display display = Display.getDefault();
		final Shell shell = new Shell();
		shell.setLayout(new FillLayout());
		shell.setSize(420, 375);
		shell.setText("SWT Application");
		shell.open();
		//定义表格
		Table table = new Table(shell, SWT.FULL_SELECTION | SWT.BORDER);
		table.setLinesVisible(true);
		table.setHeaderVisible(true);
		
		//一行代码创建TableViewer
		TableViewer tableViewer =TableRender.renderTable(table, TestDTO.class);
		//定义表格结束
		
		//定义数据
		TestDTO dto1 = new TestDTO();
		dto1.setString("bbc");
		dto1.setDate(new Date());
		dto1.setInteger(13);
		
		TestDTO dto2 = new TestDTO();
		dto2.setString("abc");
		dto2.setDate(new Date(dto1.getDate().getTime() + 800));
		dto2.setInteger(11);
		tableViewer.setInput(new TestDTO[]{dto1,dto2});
			
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
	}

}


好的,运用的设计模式什么都直接看doc和源代码吧 注释很全的,

自己认为这个工具还是可以帮助你的,需要更强大的功能请自己扩展,

这个小工具在此GPL3下开源 http://www.gnu.org/licenses/gpl-3.0.txt

看懂源代码您还需要以下知识:

Swt Jface 关于Table和TableViewer的知识

Annotation的知识

关于java反射机制的知识

设计模式:工厂方法、策略模式、适配器模式

转载请附带此bolg文章的链接,感谢

20071218 10:44 增加了对每一列的位置控制,将注解由原来的字段上移到了get方法上,增加了一个类使得创建只需要1行代码了
  • 描述: 运行结果
  • 大小: 24.2 KB
分享到:
评论
6 楼 379548695 2008-09-05  
我有添加啦一个属性控制单元格里面数据的位置。。。。。有要的可以联系我。。。
5 楼 vlinux 2008-06-27  
不方便Hacking...
4 楼 379548695 2008-06-27  
我用这个啦。很好用的。。。
很好,很强大!
3 楼 379548695 2008-06-05  
能联系到老大不能啊我的qq379548695
我正在用老大的这个东东啊。。。。。。
2 楼 tjlvan 2008-02-21  
呵呵 不错 。
不过感觉要实现比较复杂的table可能还是比较困难。
1 楼 liugang594 2008-01-03  
这个想法很好

相关推荐

    java1.5 annotation注释源代码

    Java 1.5 引入了一种新的元编程机制——注解(Annotation),极大地增强了代码的可读性和可维护性。注解是一种在代码中添加元数据的方式,它允许程序员在源代码上添加一些信息,这些信息可以被编译器或运行时环境...

    struts2 使用Annotation 配置的小例子

    1. `@Action`: 这个Annotation用于标记一个方法作为Struts2的动作。你可以指定该动作的名称、结果类型、以及它将执行的类。 2. `@Results`: 这个Annotation用于定义动作可能返回的多个结果。每个结果都有一个名称和...

    Java-Annotation使用大全

    Java-Annotation使用大全 Java-Annotation使用大全 Java-Annotation使用大全

    Annotation注解的介绍和使用

    Annotation,即注解,是Java 5.0引入的一个新特性,用于向代码中插入元数据。它是一种声明式机制,允许开发者在代码中嵌入非功能性数据,这些数据不会影响代码的运行逻辑,但可以被编译器或其他工具读取和处理。注解...

    Annotation技术

    【Annotation技术】是Java语言中的一个重要特性,引入于JDK5,主要目的是为程序元素(如包、类、方法、变量等)添加元数据,即附加信息,这些信息可以被编译器、IDE工具或者运行时系统使用。Annotation不会直接改变...

    JDK5.0 Java Annotation 介绍(ppt)

    2. **Annotation 处理工具**:Annotation Processing Tool (apt) 是一个用于处理 Annotation 的工具,它可以分析源代码中的 Annotation,并根据这些信息生成相应的代码或文件。 三、Annotation 使用方法 1. **类型...

    Annotation手册

    6. **Annotation处理器**:Java的Annotation Processing Tool (APT)是一个预处理器,它可以扫描源代码中的Annotation并触发用户定义的处理器来处理这些信息。这使得Annotation成为强大的工具,可以用来实现如代码...

    Annotation使用手册

    它可以在编译阶段扫描源代码中的 Annotation,并调用预先定义好的 Annotation 处理器来完成特定的任务,例如生成额外的代码、验证代码的正确性等。 例如,可以使用 `@NonNull` Annotation 来标注不允许为 null 的...

    annotation

    在IT行业中,注解(Annotation)是Java编程语言的一个重要特性,它允许程序员在代码中嵌入元数据,提供了一种安全的方法来修饰程序元素,如类、方法、变量等。注解不会直接影响代码的执行,但它们可以被编译器或运行...

    Annotation详细介绍(大全)

    Annotation是Java语言中的一种元数据,它提供了在代码中附加信息的能力,这些信息可以在编译时或运行时被解析和使用。Annotation的本质是一种特殊类型的注解,它允许开发者向编译器、JVM或者工具提供关于代码的额外...

    用Annotation简化Java程序的开发(PDF)

    这里定义了一个名为`MyAnnotation`的Annotation类型,其中包含一个名为`value`的成员,其默认值为空字符串。开发者可以根据实际需求定义更多成员及其默认值。 ##### 2. 使用Annotation 在定义了Annotation之后,就...

    Spring Annotation简介一

    Spring Annotation是Spring框架中的一个重要特性,它极大地简化了配置,提高了代码的可读性和可维护性。这篇博客将深入探讨Spring Annotation的基础知识,以及如何在实际项目中应用。 Spring Annotation的引入主要...

    jakarta.annotation-api-1.3.5-API文档-中英对照版.zip

    赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation-api-1.3.5.pom; 包含翻译后的API文档:jakarta.annotation-api-1.3.5-javadoc-API文档-中文(简体)-英语-对照...

    annotation 详解

    假设我们有一个名为`Something`的类,其中包含了一个不建议再使用的方法`getSomething()`: ```java public class Something { @Deprecated public Something getSomething() { return new Something(); } ...

    Annotation--学习:JDK内建Annotation

    这里定义了一个名为`MyAnnotation`的注解,`Retention`指定其生命周期,`Target`指明可以在哪些程序元素上使用。 5. **处理自定义注解** 自定义注解需要相应的处理器来处理,这通常通过Java的注解处理工具...

    annotationProcessor实例demo

    总的来说,`AnnotationProcessor` 是Java平台上的一个强大特性,它允许开发者以声明式的方式生成代码,减少了手动编写重复代码的工作量,提高了开发效率和代码质量。在实际项目中,合理利用`AnnotationProcessor` ...

    Java Annotation注解.doc

    1. **减少模板代码**:通过使用注解,开发者可以避免编写大量重复的模板代码,例如在创建JAX-RPC Web服务时,可以使用注解来自动生成接口和实现。 2. **简化配置文件**:某些API需要与程序代码一同维护的配置文件,...

Global site tag (gtag.js) - Google Analytics