按名称获取组件不支持所有操作?
Posted
技术标签:
【中文标题】按名称获取组件不支持所有操作?【英文标题】:Getting Components by name not support all actions? 【发布时间】:2014-04-11 19:38:15 【问题描述】:我有一个名为“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) 成功工作)
当我按名称调用组件时,一些添加、设置或获取不在可用操作列表中的命令。
感谢任何建议、想法、cmets。
问候。
---已解决---
public JComponent getComponentByName(String name)
if (componentMap.containsKey(name))
return (JComponent) componentMap.get(name);
else return null;
以上更改解决了我的问题。
【问题讨论】:
【参考方案1】:您的问题是您的方法被声明为返回Component
类型,如果您查看该类的API,您会发现它没有setToolTipText(...)
方法。此方法从 JComponent 类开始。一种解决方案是让 Map 仅收集 JComponents 并声明方法以返回此类型。顺便说一句,如果您使用泛型参数声明您的地图,则不必进行强制转换。
即,而不是这个声明,
private HashMap componentMap;
使用,
private HashMap<String, Component> componentMap;
或者如果这对你有用:
private HashMap<String, JComponent> componentMap;
【讨论】:
你说得对,谢谢。我将方法 getComponentByName 转换为 JComponent。但是这次我不能在循环中使用这种方法。 Java 说“这里不允许使用 Void 类型”当按名称调用组件时如何使用所有 JComponents 操作? @BlackWhite:你有一个新的不同的问题,一个你还没有清楚地向我们展示的问题,包括代码行等。你的 for 循环是什么意思?我们不擅长阅读思想或看到未显示的代码。考虑在一个新问题中提出这个问题。您需要出示您的代码来解决这个问题,以便我们理解。 抱歉。我使用了 tooltiptex 错误的括号。我将 public Component getComponentByName(String name) 更改为 public JComponent getComponentByName(String name) --- 并返回 (Component) componentMap.get(name);返回 (JComponent) componentMap.get(name);用同样的方法。它对我有用。【参考方案2】:您可能应该使用具有setToolTipText 的JComponent
。如果这不是您想要的,您可以检查 java.awt.Component
是否为 JComponent
并强制转换:
if (components[i]) instanceof JComponent)
JComponent jc = (JComponent) components[i];
// now you can use setToolTipText
【讨论】:
以上是关于按名称获取组件不支持所有操作?的主要内容,如果未能解决你的问题,请参考以下文章
material-ui makeStyles:如何按标签名称设置样式?