什么是java.awt.Component.getName()和setName()用于?

什么是java.awt.Component.getName()用于? 在我使用NetBeans构建的应用程序中,它似乎总是为null 。 我正在考虑在其中存储每个组件的一些帮助文本 – 我不想使用工具提示,我有另一个面板,我将显示帮助文本。

Component.setName(..)在JDK中主要由外观实现类用于为每个组件设置类似ID的字符串,例如,BasicOptionPaneUI可以在按钮组件上调用它以将其名称设置为“OptionPane.button”。

当在复合/父组件内以及AWT和Swing调试日志代码中设置子组件的名称时,getName()用于toString()方法。 我强烈怀疑某些AWT / Swing测试框架也使用了getName()方法。

因此,如果您不依赖于getName()的任何上述用法,您可以尝试将其用于帮助消息,但我不建议使用它。

也许你应该重新考虑你的设计? 使用该名称在哈希映射中进行一些查找,该哈希映射从资源包中加载帮助文本?

我还没有看到它被框架用于任何东西。 如果您将组件传递给方法,那么它很有用,因此您可以询问其名称以决定如何处理它们。 此外,许多UI测试框架使用它来允许您在测试脚本中按名称引用组件。 我没有看到任何理由你不能用它来帮助文本。

FEST使用Component的名称在testcases中标识它。

component.getName()方法主要用于侦听器。 如果设置组件的名称( component.setName(name) ),则可以从Listener的方法中调用该特定组件。

例:

 public void someMethodOfsomeListener(SomeEvent e){ if (e.getComponent().getName().equals(component.getName()) //do stuff... } 

请注意,您必须显式设置组件的名称,否则它将返回null

Herman Lintvelt的答案最终成为我的应用程序的正确答案。

我创建了一个名为HelpText.properties的资源包。 它包含名称=值对。 我使用name = value对中的“name”setName()d我的每个组件。 然后我使用框架的getGlassPane()来捕获所有鼠标移动。 当鼠标在命名组件上运行时,它会在包中查找名称,显示帮助(如果可用)并将鼠标移动转移到实际组件。

  • 在这里查看如何使用玻璃窗格。
  • Jan Newmarch 关于使用资源包的网页非常有帮助。
  • Kevin Riff的回复帮助我弄清楚如何找到我的资源包。

呼。 只有2天左右的时间。 我终于开始习惯Java 🙂

此外,由于我认为java.awt.Component是X中的重量级对象,xwininfo和xwd等程序可能允许您按名称指定它。

我只是用JFrame尝试了它,并且setName没有设置窗口的名称,窗口是由我在构造函数中传递的字符串命名的。 但是我没有任何仅用于测试的示例代码,所以我对上面写的内容可能是错的。

我用它来处理一个单独的类中的监听器。 我作为参数接收包含我的object.addListener的组件不是作为容器而是作为包含该对象的类。 感谢Vivavinyl首先设置名称的提示。 它很有用,也很有用。

这是我使用getName()的原因:

  Frame[] frames = JFrame.getFrames(); for (int i = 0; i < frames.length; ++i) { //get the frame Frame frame = frames[i]; if (frame.getName().equals(frameName)) { //make the frame visible frame.setVisible(true); //focus the frame frame.requestFocus(); //found return; } } 

我已经搜索了许多获得名称的答案,我认为这是唯一简单的解决方案

 public static void main(String[] args) { ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { String name = actionEvent.getSource().toString(); UserReaction(ObjectName.getComponentVariableName(name), "null"); } }; Button calculate_btn = new Button("Calculate"); calculate_btn.setName("Calculate"); calculate_btn.addActionListener(actionListener); } private static void UserReaction(String objectName) { if (objectName.equals("Calculate")) { //do something; } }static public String getComponentVariableName(String name) { String res = (name.substring(name.indexOf("[") + 1)); res = res.split(",")[0]; return res; }