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
FEST uses the name of a Component to identify it in testcases.
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.
Whew. Only 2 days worth of dinking around. I'm finally starting to get used to Java :)
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?
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
.
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;
}
}
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.