Reputation: 42796
May I know how can I determine whether a component is found in JPanel?
boolean isThisComponentFoundInJPanel(Component c)
{
Component[] components = jPanel.getComponents();
for (Component component : components) {
if (c== component) {
return true;
}
}
return false;
}
Using loop is not efficient. Is there any better way?
Upvotes: 9
Views: 13125
Reputation: 147164
Performance of this operation is highly unlikely to be a bottleneck.
Looking through the contents of a container probably indicates bad design. Tell the GUI what to do, don't interrogate its state.
Probably a better way to write the code is to use existing routines. Whilst there is some overhead, they are more likely to be already compiled (therefore possibly faster) and are less code.
boolean isComponentInPanel(Component component) {
return
java.util.Arrays.asList(panel.getComponents())
.contains(component);
}
(Or use kdgregory's answer.)
Upvotes: 5
Reputation: 39606
if (c.getParent() == jPanel)
Call recursively if you don't want immediate parent-child relationships (which is probably the case in a well-designed panel).
... although in a well-designed panel, it's very questionable why you'd need to know whether a component is contained in the panel.
Upvotes: 15