22

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

4

9 回答 9

20

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

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

因此,如果您不依赖 getName() 的上述任何用法,您可以尝试将它用于您的帮助消息,尽管我不推荐它。

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

于 2008-10-22T19:55:45.553 回答
6

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

于 2008-10-22T19:11:55.563 回答
2

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

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

唷。只有 2 天的用餐时间。我终于开始习惯 Java 了 :)

于 2008-10-22T21:55:31.253 回答
2

FEST使用组件的名称在测试用例中识别它。

于 2012-09-04T14:28:26.127 回答
1

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

例子:

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

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

于 2009-07-17T15:08:37.660 回答
0

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

我只是用一个JFrame试了一下,setName没有设置窗口的名字,窗口是由我在构造函数中传入的字符串命名的。但是我没有任何仅 awt 的示例代码可供测试,所以我上面写的内容可能是错误的。

于 2008-10-22T19:26:28.763 回答
0

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

于 2009-07-26T22:24:34.377 回答
0

这就是我使用 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;

        }

    }
于 2009-09-24T00:43:18.400 回答
-1

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

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;
}
于 2017-03-22T16:05:06.043 回答