Cheok Yan Cheng
Cheok Yan Cheng

Reputation: 42796

A Fast Way to Determine Whether A Componet is Found In JPanel

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

Answers (3)

Alex
Alex

Reputation: 2468

you can use

jPanel.isAncestorOf(component)

for recursive search

Upvotes: 10

Tom Hawtin - tackline
Tom Hawtin - tackline

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

kdgregory
kdgregory

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

Related Questions