I have experienced a problem related to Container.remove(index).

As this code has been around for a long time, I’m wondering (1) why it does 
what it does and (2) whether
there is some AWT/Swing design rule that I should be following (but I don’t 
know of one that would have helped).

The implementation of Container.remove(index) first identifies the component at 
the specified index in the component list.

It then calls removeNotify on that component and calls removeLayoutComponent on 
its layout manager.

Only then does it remove the component from the component list.

The problem is that is uses the original index to remove the component from the 
component list, which
presumes that the previous calls to removeNotify and removeLayoutComponent have 
not done anything
to alter the component list.

As both of these methods can run arbitrary client code, the presumption seems 
unwarranted.

In my case, removeNotify eventually was called on a focused text field, which 
caused the text field
to lose focus, which generated events, and an event handler removed the same 
component from the
container.

What am I missing?

Reply via email to