我有名为“p0_1000”的 jTextField
我使用下面的方法可以通过名称调用它;
在类里面创建 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("trying");当鼠标悬停在相关文本字段上时,成功显示工具提示文本。
但是如果我使用 getComponentByName("p0_1000").setToolTipText("trying"); setToolTipText 无法识别。
getComponentByName("p0_1000") 我测试成功。因为如果我输入“.”在方法名称之后,出现可用的操作列表,我可以使用它们(例如 .setVisible(false) 成功工作)
当我按名称调用组件时,某些添加、设置或获取命令不在可用操作列表中。
欢迎任何建议、想法、评论。
问候。
---已解决---
public JComponent getComponentByName(String name) {
if (componentMap.containsKey(name)) {
return (JComponent) componentMap.get(name);
}
else return null;
}
上述更改解决了我的问题。
最佳答案
您可能应该使用 JComponent
它有 setToolTipText 。如果这不是您想要的,您可以检查 java.awt.Component
是否是 JComponent
并进行转换:
if (components[i]) instanceof JComponent) {
JComponent jc = (JComponent) components[i];
// now you can use setToolTipText
}
关于java - 按名称获取组件不支持所有操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270723/