我正在尝试使用Swing创建用户界面,但是我不想手动在组件数组中包含每个组件。
到目前为止,我尝试过的最好的方法是抛出一个异常,这是我无法真正拥有的。
for (Field f : this.getClass().getFields()) {
if (f.getType().isAssignableFrom(JComponent.class)) {
JComponent field = (JComponent) f.get(JComponent.class);
components.add(field);
}
}
我希望展示的代码不包含任何异常,但确实包含任何异常。 有什么方法可以做到而又不会有例外的风险?
答案 0 :(得分:3)
reflect
离子用法。大多数情况下,创建component
的原因是将其添加到容器中。将其添加到此处后,您可以使用Container#getComponents
方法轻松地从容器中询问他们。
检查此示例:
JButton loadButton = new JButton("load");
JButton saveButton = new JButton("save");
JPanel panel = new JPanel();
panel.add(loadButton);
panel.add(saveButton);
for (Component component : panel.getComponents()) {
// ...
}
为了给您更多帮助,您将必须告诉我们您想对这个数组做什么。我的意思是,您想在哪里使用它?
如果您坚持要使用它,则for
应该是:
for (Field f : this.getClass().getDeclaredFields()) {
if (JComponent.class.isAssignableFrom(f.getType())) {
JComponent field = (JComponent) f.get(this);
components.add(field);
}
}