我的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;
}
以上更改解决了我的问题。
答案 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;