我正在寻找类似于 ImageJ 或 Adobe Dialog Manager 中使用的 GenericDialog 的东西。目标是创建一个对话框的模板(字段数量、类型等 - 需要的信息,而不是它的呈现方式)并将其发送到视图类。此视图可能是基于 Swing 的 GUI 或简单的控制台 UI。用户填写的字段和值对于对话框模板的源是可见的。是否有一些 Java 库可以实现这一点?我知道有 GenericDialog,但我不确定是否可以在我的项目中使用它(因为它是 ImageJ 的一部分)。更重要的是,我觉得这对我来说太“重”了。
2 回答
ImageJ2项目几乎提供了您所描述的内容:一种灵活的机制,用于执行具有类型输入和输出参数的可运行操作(称为commands )。
@Parameter
您可以通过使用注解标记命令的输入和输出来定义它们。ImageJ 自动负责填写输入(通常通过使用对话框提示用户输入),以及在命令运行后显示输出。
如何从用户那里获取输入取决于哪个(如果有)用户界面与 ImageJ 上下文相关联。我们已经实现了对 Swing 的完整小部件支持,以及“纯”AWT(即java.awt
小部件)、Apache Pivot 和 Eclipse SWT 中的概念验证实现。
一些例子:
- GradientImage.java:一个简单的示例命令
- ParameterTester.java : 执行多种类型参数的命令
所有代码均获得 BSD-2 许可。ij-core
在撰写本文时,包含该框架的JAR 约为 334KB。包含 Swing 小部件的ij-ui-swing
JAR 大约为 150KB,但它还包含其他可以删除的内容(相比之下,ij-ui-pivot
JAR 只有大约 30KB)。
综上所述,如果您认为 ImageJ 1.x 的GenericDialog
“太重”,那么您很可能会对 ImageJ2 的命令框架(或任何其他解决此问题的解决方案)有同样的感觉;我认为它不会变得“更轻” "比GenericDialog
)。但在这种情况下,也许 ImageJ2 实现会给您一些关于如何滚动自己的想法。
ImageJ 中的通用对话框扩展了 java.awt.Component,所以这是否与您将对话框模板与视图分离的要求相矛盾?
Java 的集合将允许您封装信息、类型等。
java.util.LinkedHashMap<String,Type> dialog = new java.util.LinkedHashMap<String,Type>;
其中键是字段的名称,值是字段的类型。
要创建基于摆动的对话框,请参见
http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html