Java从给定的数组列表动态生成各种字段类型

标签 java arrays variables dynamic

我正在尝试构建一个表单生成类,但我的逻辑语句中的某个地方可能遇到了故障。

您有两个字符串数组。

String[] fieldNames;
String[] fieldTypes;

它们的长度应该相同。 fieldName[] 中的每个值都对应于 fieldTypes[] 数组中的一个值。

我想根据 fieldTypes 数组中指定的值创建各种字段,并为创建的字段分配 fieldNames 数组中指定的名称。例如

String[] fieldNames = {"Name", "Phone", "Gender"}
String[] fieldTypes = {"TextFied","ComboBox", "RadioButton"} 

字段类型和名称可能有所不同。它们可以是您想要的任何东西。

现在,使用上述信息,如何将 fieldNames 分配给 fieldTypes 以便我可以在数据处理中使用它们?即

TextField name = new TextField();
ComboBox phone = new ComboBox();
RadioButton gender = new RadioButton();

我已经考虑了一周了,网上似乎没有任何解决方案。或者更确切地说,我还没能找到一个。有人可以指出我正确的方向,我将不胜感激

最佳答案

您可以使用 StringClassMap,如下所示:

// This is for AWT - change class bound to whatever super class or interface is 
// extended by the elements of the framework you are using
Map<String, Class<? extends Component>> fields = new LinkedHashMap<String, Class<? extends Component>>();
fields.put("Name", TextField.class);

Map 是一个LinkedHashMap,因此您可以保持键的顺序。

通过 get 方法检索值后,您可以获得所需组件的类并进行操作。

编辑

以下是如何通过反射检索组件。请注意,这不是唯一的解决方案,也可能不是“最干净的”...

try {
    Component foo = fields.get("Name").newInstance();
    System.out.println(foo.getClass());
}
catch (Throwable t) {
    // TODO handle this better
    t.printStackTrace();
}

输出:

class java.awt.TextField

关于Java从给定的数组列表动态生成各种字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17785950/

相关文章:

python - 将列表的元素添加到某些列中的所有元素

php - 如何使用键从数组中删除元素

ios - 创建一个类并将信息存储在数组中

javascript - 无法访问变量

javascript - 更改 Javascript 中对象数组的 var 名称

java - Html.fromHtml() 强制不删除未知标签

Java 代码在应该正常工作的时候却无法正常工作

java - 使用 hibernate session 获取对象而不使用事务

C++创建指针时如何使用变量作为指针的大小?

java - 递归对数以找到最接近另一个整数 x 的形式 = (2)^n 的最大整数 (n)