繁体   English   中英

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

[英]What is java.awt.Component.getName() and setName() used for?

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

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

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

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

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

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

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

例:

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

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

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

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

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

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

我用它来处理一个单独的类中的听众。 我作为参数接收包含我的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;

        }

    }

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM