我知道这是一个古老的问题,但我发现自己刚才问了.我想要一个简单的方法来获取组件的名称,所以我不必每次编写一些卷积的代码来访问不同的组件.例如,让JButton访问文本字段中的文本或列表中的选择.
最简单的解决方案是使所有组件变量都是类变量,以便您可以随时访问它们.然而,并不是每个人都希望这样做,而有些(像我自己)使用的GUI编辑器不会将这些组件作为类变量生成.
我的解决方案很简单,我想想,并不真正违反任何编程标准,据我所知(参考什么fortran得到).它允许以名称访问组件的简单直接的方式.
>创建Map类变量.您将需要导入HashMap
非常少.为了简单起见,我命名为mine componentMap.
private HashMap componentMap;
>将所有组件添加到正常的框架中.
initialize() {
//add your components and be sure
//to name them.
...
//after adding all the components,
//call this method we're about to create.
createComponentMap();
}
>在你的类中定义以下两个方法.如果您还没有,则需要导入组件:
private void createComponentMap() {
componentMap = new HashMap();
Component[] components = yourForm.getContentPane().getComponents();
for (int i=0; i < components.length; i++) {
componentMap.put(components[i].getName(), components[i]);
}
}
public Component getComponentByName(String name) {
if (componentMap.containsKey(name)) {
return (Component) componentMap.get(name);
}
else return null;
}
>现在,您已经有一个HashMap,将您的框架/内容窗格/面板/ etc中的所有当前存在的组件映射到各自的名称.
>要现在访问这些组件,就像调用getComponentByName(String name)一样简单.如果具有该名称的组件存在,它将返回该组件.如果没有,则返回null.将组件投入正确的类型是您的责任.我建议使用instanceof来确定.
如果您计划在运行时任何时候添加,删除或重命名组件,我将考虑添加根据您的更改修改HashMap的方法.