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

标签 java swing hashmap components

我有名为“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/

相关文章:

java - 添加 HttpServletResponse/HttpServletRequest 作为方法参数时 Spring 请求挂起

java - Jframe java 中没有内容

java - 如何决定添加到 JPanel 的组件的顺序

java - 将java字符串转换为键值对

java - 试图避免并发修改异常

java - 用于检查带退格的字符串是否相等的节省空间的算法?

java - 从字典比较的角度来看,Java 中的第一个字符串是什么?

java - Recycleview 不从 json url 加载图像

java - 在 GUI 中列出 ArrayList 中的对象并在多个 ArrayList 之间交替

java - 如何为特定对象创建 HashMap