Java / Groovy类自我描述来构建用户界面元素

时间:2012-02-08 21:43:51

标签: java groovy user-controls annotations

我想描述一个旨在执行某项任务的Java类的预期输入, 在Java类本身。目的是能够直接生成用户界面加载这个类。

例如,假设基接口为Task(实现Runnable):

public class BuildRectangleTask implements Task {
    public void setLength(double val) { /* ... */ }
    public void setWidth(double val) { /* ... */ }
    public void run() { /* Build a rectangle */ }
}

我可以使用一些反射从中获取参数名称,然后构建 用户界面的相关部分,例如:

<form>
    <label for="length">Length: </label>
         <input type="text"name="length" id="length" /><br />
    <label for="width">Width: </label>
         <input type="text"name="width" id="width" />
</form>

这可能适用于非常简单的示例,但访问者名称不能总是翻译 适当地使用自然语言而不会听起来很尴尬(它们也可能需要翻译)。 此外,我还希望能够获得其他信息(例如哪些信息是可选的或具有默认值)。

我正在考虑使用注释来描述这个:

@Description(text="This tasks builds a rectangle")
public class BuildRectangleTask implements Task {
    @Input(label="Length", optional=false)
    public void setLength(double val) { /* ... */ }

    @Input(label="Width", optional=true, default=10,
           help="This is the width of the rectangle")
    public void setWidth(double val) { /* ... */ }

    public void run() { /* Build a rectangle */ }
}

这对于额外信息也很有用,例如多种选择:

@Input(label="Colour", options={"Red", "Green", "Blue"})

我还希望能够基于以下信息生成其他类型的用户界面,例如命令行,get-opt样式:

java TaskProcessor BuildRectangle --help

usage: BuildRectangle --height= [ --width=10 ] [ --color= ]
Options:
    --height=   ...
    --width=    This is the width of the rectangle (defaults to 10).
    --color=    Red, Blue, Green.

是否有任何标准的注释或通常的框架来实现这一点(或者可能是完全不同的方法),最好与Java和Groovy兼容?

我希望这个类尽可能地自包含(即避免配置文件)。 (我不一定对定义这样一个任务的输出以及它是如何产生兴趣 应该显示。)

2 个答案:

答案 0 :(得分:1)

您可能需要查看javabuilders。它与你所获得的想法有很多重叠。特别是,它允许您以声明方式指定UI布局,并自动将数据从UI绑定到Java对象。

答案 1 :(得分:1)

您可以尝试http://today.java.net/pub/a/today/2008/06/24/automatic-user-interface-with-openxava.html这是您想要做的事情,但可能是错误的框架!可能有点矫枉过正。