代码之家  ›  专栏  ›  技术社区  ›  JohnnyLambada

什么是java.AWT.Eng.GnNAME()和StNAME省()?

  •  21
  • JohnnyLambada  · 技术社区  · 16 年前

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

    9 回复  |  直到 16 年前
        1
  •  20
  •   Herman Lintvelt    16 年前

    component.set name(..)在JDK中主要由look and feel实现类使用,用于为每个组件设置类似ID的字符串,例如basicoptionpaneui可以在按钮组件上调用它,将其名称设置为“optionpane.button”。

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

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

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

        2
  •  6
  •   AdamC    16 年前

    我没有看到它在框架中有任何用途。如果您将组件传递给一个方法,这样您就可以询问它们的名称来决定如何处理它们,这将非常有用。此外,许多UI测试框架都使用它来允许您在测试脚本中按名称引用组件。不过,我看不出有什么理由你不能把它用于帮助文本。

        3
  •  2
  •   Simulant    12 年前

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

        4
  •  2
  •   palacsint    9 年前

    这个 component.getName() 方法主要用于侦听器。如果设置组件的名称( component.setName(name) )您可以从 Listener .

    例子:

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

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

        5
  •  1
  •   JohnnyLambada    16 年前

    HermanLintwelt的答案最终是我应用程序的正确答案。

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

    唷!只需要两天的时间。我终于开始习惯Java了:

        6
  •  0
  •   Paul Tomblin    16 年前

    另外,因为我认为java.awt.component是x中的一个重量级对象,所以xwininfo和xwd等程序可能允许您按名称指定它。

    我刚用一个jframe尝试过,set name没有设置窗口的名称,窗口是由我在构造函数中传递的字符串命名的。但是我没有任何可以测试的不仅仅是awt的示例代码,所以我在上面写的东西可能是错误的。

        7
  •  0
  •   David    15 年前

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

        8
  •  0
  •   user178176    15 年前

    这是我使用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;
    
            }
    
        }
    
        9
  •  -1
  •   Tural    7 年前

    我找了很多答案想知道名字 我认为这是唯一简单的解决办法

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