Что если пользователь использует клавиатуру, чтобы открыть всплывающее окно, а затем использует клавишу выхода, чтобы закрыть всплывающее окно?
Я бы использовал PopupMenuListener. Это должно обрабатывать действия мыши и клавиатуры. Концепция будет такой же, как и другие предложения. Когда появится всплывающее окно, вы сохраните выбранный индекс. Когда он закрывается, вы сравниваете выбранный индекс, чтобы увидеть, что он изменился.