最近一直在找一个方便的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
分享到:
- 2007-12-17 21:48
- 浏览 2115
- 评论(6)
- 论坛回复 / 浏览 (4 / 6606)
- 查看更多
相关推荐
Java 1.5 引入了一种新的元编程机制——注解(Annotation),极大地增强了代码的可读性和可维护性。注解是一种在代码中添加元数据的方式,它允许程序员在源代码上添加一些信息,这些信息可以被编译器或运行时环境...
1. `@Action`: 这个Annotation用于标记一个方法作为Struts2的动作。你可以指定该动作的名称、结果类型、以及它将执行的类。 2. `@Results`: 这个Annotation用于定义动作可能返回的多个结果。每个结果都有一个名称和...
Java-Annotation使用大全 Java-Annotation使用大全 Java-Annotation使用大全
Annotation,即注解,是Java 5.0引入的一个新特性,用于向代码中插入元数据。它是一种声明式机制,允许开发者在代码中嵌入非功能性数据,这些数据不会影响代码的运行逻辑,但可以被编译器或其他工具读取和处理。注解...
【Annotation技术】是Java语言中的一个重要特性,引入于JDK5,主要目的是为程序元素(如包、类、方法、变量等)添加元数据,即附加信息,这些信息可以被编译器、IDE工具或者运行时系统使用。Annotation不会直接改变...
2. **Annotation 处理工具**:Annotation Processing Tool (apt) 是一个用于处理 Annotation 的工具,它可以分析源代码中的 Annotation,并根据这些信息生成相应的代码或文件。 三、Annotation 使用方法 1. **类型...
6. **Annotation处理器**:Java的Annotation Processing Tool (APT)是一个预处理器,它可以扫描源代码中的Annotation并触发用户定义的处理器来处理这些信息。这使得Annotation成为强大的工具,可以用来实现如代码...
它可以在编译阶段扫描源代码中的 Annotation,并调用预先定义好的 Annotation 处理器来完成特定的任务,例如生成额外的代码、验证代码的正确性等。 例如,可以使用 `@NonNull` Annotation 来标注不允许为 null 的...
在IT行业中,注解(Annotation)是Java编程语言的一个重要特性,它允许程序员在代码中嵌入元数据,提供了一种安全的方法来修饰程序元素,如类、方法、变量等。注解不会直接影响代码的执行,但它们可以被编译器或运行...
Annotation是Java语言中的一种元数据,它提供了在代码中附加信息的能力,这些信息可以在编译时或运行时被解析和使用。Annotation的本质是一种特殊类型的注解,它允许开发者向编译器、JVM或者工具提供关于代码的额外...
这里定义了一个名为`MyAnnotation`的Annotation类型,其中包含一个名为`value`的成员,其默认值为空字符串。开发者可以根据实际需求定义更多成员及其默认值。 ##### 2. 使用Annotation 在定义了Annotation之后,就...
Spring Annotation是Spring框架中的一个重要特性,它极大地简化了配置,提高了代码的可读性和可维护性。这篇博客将深入探讨Spring Annotation的基础知识,以及如何在实际项目中应用。 Spring Annotation的引入主要...
赠送源代码: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文档-中文(简体)-英语-对照...
假设我们有一个名为`Something`的类,其中包含了一个不建议再使用的方法`getSomething()`: ```java public class Something { @Deprecated public Something getSomething() { return new Something(); } ...
这里定义了一个名为`MyAnnotation`的注解,`Retention`指定其生命周期,`Target`指明可以在哪些程序元素上使用。 5. **处理自定义注解** 自定义注解需要相应的处理器来处理,这通常通过Java的注解处理工具...
总的来说,`AnnotationProcessor` 是Java平台上的一个强大特性,它允许开发者以声明式的方式生成代码,减少了手动编写重复代码的工作量,提高了开发效率和代码质量。在实际项目中,合理利用`AnnotationProcessor` ...
1. **减少模板代码**:通过使用注解,开发者可以避免编写大量重复的模板代码,例如在创建JAX-RPC Web服务时,可以使用注解来自动生成接口和实现。 2. **简化配置文件**:某些API需要与程序代码一同维护的配置文件,...