【问题标题】:What is java.awt.Component.getName() and setName() used for?java.awt.Component.getName() 和 setName() 是做什么用的?
【发布时间】:2010-09-18 15:13:57
【问题描述】:

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

【问题讨论】:

    标签: java awt


    【解决方案1】:

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

    【讨论】:

    • 我们用它来测试机器人/UI。
    • 我们也将它用于机器人/UI 测试。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 很高兴我能帮上忙。享受 Java。
        【解决方案5】:

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

        例子:

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

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

        【讨论】:

        • 如果您在侦听器中有component 引用,您也可以使用e.getComponent() == component,这样不易出错。我也会考虑使用多个监听器。
        • 组件也可以有相同的名称。不要混淆上述组件相等性测试。
        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

              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;
              }
              

              【讨论】:

              • 这根本不回答问题?
              猜你喜欢
              • 1970-01-01
              • 2012-02-05
              • 1970-01-01
              • 1970-01-01
              • 2016-06-09
              • 2015-05-22
              • 2011-04-28
              • 1970-01-01
              • 2021-05-29
              相关资源
              最近更新 更多