Короче говоря, вы можете сделать это, но вам придется написать свой собственный слушатель мыши, который может потребовать много копировать и вставлять из исходного кода jdk, что не очень хорошая идея, и я не уверен насчеткакие лицензионные ограничения он наложит на ваш код.
Я бы начал копать с этого метода:
javax.swing.plaf.basic.BasicMenuItemUI.Handler#mouseReleased
, который кажется точкой входа, откуда механизм обработки меню скрывает всплывающее окно.Я бы посмотрел поближе на
javax.swing.plaf.basic.BasicPopupMenuUI.MouseGrabber#stateChanged
EDIT Разработка ответа от @Burhan Valikarimwala, попробуйте это apporach: удалите всех слушателей действий из отключенного JMenuItem и сохраните их в некоторой статической временной структуре(скажем, Map<WeakReference<JMenuItem>, List<MouseListener>>
), таким образом он не будет скрывать всплывающее окно.Когда вы снова включите пункт меню, добавьте всех слушателей обратно.Сделайте это в некотором методе util, и он будет без шва.