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

后端 未结 9 1542
半阙折子戏
半阙折子戏 2020-11-28 13:50

What is java.awt.Component.getName() used for? It always seems to be null in the applications I build with NetBeans. I\'m thinking of storing some help text p

相关标签:
9条回答
  • 2020-11-28 13:51

    FEST uses the name of a Component to identify it in testcases.

    0 讨论(0)
  • 2020-11-28 13:54

    Herman Lintvelt's answer ended up being the correct one for my app.

    I created a resource bundle named HelpText.properties. It contains name=value pairs. I setName()d each of my Components with the "name" from the name=value pair. I then used a the frame's getGlassPane() to capture all mouse movements. When a mouse runs over a named component, it looks up the name in the bundle, displays help if available and forwards the mouse motion to along to the actual Component.

    • Look here for how to use the glass pane.
    • Jan Newmarch's web page on using resource bundles was very helpful.
    • Kevin Riff's response helped me figure out how to find my resource bundle.

    Whew. Only 2 days worth of dinking around. I'm finally starting to get used to Java :)

    0 讨论(0)
  • 2020-11-28 13:55

    Component.setName(..) is used in the JDK mostly by the look and feel implementation classes to set ID-like strings for each component, e.g. BasicOptionPaneUI might call it on a button component to set its name to "OptionPane.button".

    The getName() is used in toString() methods, when setting the names of child components inside a Composite/parent Component and in AWT and Swing debug logging code. I suspect strongly that the getName() method is also used by some AWT/Swing testing frameworks.

    So if you're not dependent on any of the above uses of getName(), you might try using it for your help messages, though I would not recommend it.

    Maybe you should reconsider your design? Use the name to do some lookup in a hashmap that loads the help text from a resource bundle?

    0 讨论(0)
  • 2020-11-28 13:55

    The component.getName() method is mostly used with listeners. If you set the name of a component (component.setName(name)) you can call to that specific component from within a method of a Listener.

    Example:

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

    Be aware that you have to explicitly set the name of the component, otherwise it will return null.

    0 讨论(0)
  • 2020-11-28 14:02

    This is what I use getName() for:

        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;
    
            }
    
        }
    
    0 讨论(0)
  • 2020-11-28 14:03

    Also, since I think java.awt.Component is a heavyweight object in X, programs like xwininfo and xwd might allow you to specify it by name.

    I just tried it with a JFrame, and setName didn't set the name of the window, the window was named by the string I passed in the constructor. But I don't have any awt-only example code to test with, so I could be wrong about what I wrote above.

    0 讨论(0)
提交回复
热议问题