В конце концов, я «решил» это, взломав проблему. Как указывает Camickr, JPopupMenu довольно глючит. Однако это единственная реализация всплывающего меню Swing, которая позволяет иметь значок рядом с каждым элементом меню.
Мое решение состояло в том, чтобы реализовать прослушиватель в jpopupmenu, который, если пользователь наведет курсор мыши на меню, через 3 секунды будет установлен на .isVisible (false), если пользователь не наведет курсор мыши на меню в течение этого времени.
Чтобы добиться этого, мне пришлось использовать отдельный поток, который постоянно проверял, было ли всплывающее меню активным. Если это так, проверьте, была ли мышь над ним, используя прослушиватель событий, и установите для видимости значение false, если пользователь не вводил его снова в течение 3 секунд.
Это не идеальное решение, так как пользователь все еще должен ждать 3 секунды, чтобы меню исчезло (оно должно быть мгновенным, если он / она щелкает), и оно исчезнет, даже если оно находится в фокусе (не должно, если пользователь щелкает прочь). Тем не менее, он чувствовал себя «достаточно хорошо», чтобы быть принятым.
Надеюсь, это поможет.