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 per component in it -- I don't want to use the tooltip, I have another panel where I'll show the help text.
I haven't seen it used for anything by the framework. Its useful if you have components being passed in to a method so you can ask their name to decide how to handle them. Also, many UI testing frameworks use this to allow you to refer to the components by name in the testing scripts. I don't see any reason you can't use it for help text though.
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.
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?
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 :)
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.
Ex:
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.
I use it for handling listeners in one single class apart. I receive as a parameter the component which contains my object.addListener not as a container but as the class that contains that object. Thanks Vivavinyl for the the tip of setting the name first. It was useful and worked.
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;
}
}