按名称获取组件不支持所有操作?

时间:2014-03-08 14:45:17

标签: java swing hashmap components

我的jTextField名为“p0_1000”

我使用下面的方法可以按名称调用它;

在课堂上创建Hashmap。

private HashMap componentMap;

使用组件名称填充hashmap。

private void createComponentMap() {
    componentMap = new HashMap<String,Component>();
    Component[] components = jDesktopPane1.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;
}

如果我直接使用p0_1000.setToolTipText(“尝试”);当鼠标放在相关的文本字段上时,成功显示tooltiptext。

但是如果我使用getComponentByName(“p0_1000”)。setToolTipText(“trying”);无法识别setToolTipText。

getComponentByName(“p0_1000”)成功运行我测试。因为如果我键入“。”在方法名称之后,可用动作列表来了,我可以使用它们(例如.setVisible(false)成功地工作)

当我按名称调用componen时,有些添加,设置或获取命令不在可用操作列表中。

任何建议,想法,意见都表示赞赏。

问候。

--- ---解决

public JComponent getComponentByName(String name) {
    if (componentMap.containsKey(name)) {
            return (JComponent) componentMap.get(name);
    }
    else return null;
}

以上更改解决了我的问题。

2 个答案:

答案 0 :(得分:3)

您可能应该使用JComponent java.awt.Component。如果那不是您想要的,您可以检查JComponent是否为if (components[i]) instanceof JComponent) { JComponent jc = (JComponent) components[i]; // now you can use setToolTipText } 并投射:

{{1}}

答案 1 :(得分:2)

您的问题是您的方法被声明为返回Component类型,如果您查看此类的API,您会发现它没有setToolTipText(...)方法。此方法从JComponent类开始。一种解决方案是使Map仅收集JComponents并声明返回此类型的方法。顺便提一下,如果您使用通用参数声明Map,则不必进行演员。

,而不是这个声明,

private HashMap componentMap;

使用,

private HashMap<String, Component> componentMap;

或者如果这对您有用,请再次:

private HashMap<String, JComponent> componentMap;