RFR: 4938801: The popup does not go when the component is removed [v7]

Alexey Ivanov aivanov at openjdk.org
Wed Jul 30 13:08:58 UTC 2025


On Wed, 30 Jul 2025 09:56:41 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:

>> Issue is seen that a popup doesn't get closed when the component that invokes it, gets removed from the parent container.
>> This is because the JPopupMenu does not listen to its invoker liefecycle thereby behaving as a standalone entity after creation.
>> Fix is made to make sure popup listens to its invoker lifecycle by registering its PropertyChangeListener to the invoker and listens to the ["ancestor" property name ], https://github.com/openjdk/jdk/blob/441dbde2c3c915ffd916e39a5b4a91df5620d7f3/src/java.desktop/share/classes/javax/swing/JComponent.java#L4853-L4858 which will become null when removed, wherein we should dispose of the popup
>
> Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Serialization fix

Changes requested by aivanov (Reviewer).

src/java.desktop/share/classes/javax/swing/JPopupMenu.java line 934:

> 932:     }
> 933: 
> 934:     private class Listener implements PropertyChangeListener,Serializable {

Suggestion:

    private final class AncestorListener implements PropertyChangeListener, Serializable {

Be more specific. Make the class `final` explicitly; it's not meant to be extended. Put a space after the comma.

src/java.desktop/share/classes/javax/swing/JPopupMenu.java line 935:

> 933: 
> 934:     private class Listener implements PropertyChangeListener,Serializable {
> 935:         public void propertyChange(PropertyChangeEvent e) {

Add `@Override` annotation.

-------------

PR Review: https://git.openjdk.org/jdk/pull/26407#pullrequestreview-3071424167
PR Review Comment: https://git.openjdk.org/jdk/pull/26407#discussion_r2242610638
PR Review Comment: https://git.openjdk.org/jdk/pull/26407#discussion_r2242623614


More information about the client-libs-dev mailing list