我正在尝试构建一个表单生成类,但我的逻辑语句中的某个地方可能遇到了故障。
您有两个字符串数组。
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();
我已经考虑了一周了,网上似乎没有任何解决方案。或者更确切地说,我还没能找到一个。有人可以指出我正确的方向,我将不胜感激
最佳答案
您可以使用 String
和 Class
的 Map
,如下所示:
// 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/