Проблема «нажать вкладку» и «нажать Enter» означают две разные вещи в Java Swing. Но эти два действия означают одно и то же для вас, меня и пользователя.
Swing не имеет единого механизма для обнаружения «когда пользователь заканчивает ввод данных». Вместо этого Swing фокусируется на механике «это поле теряет фокус клавиатуры» и «пользователь нажимает клавишу Enter, находясь внутри поля».
Семантически эти два действия означают одно и то же с точки зрения пользователя: «Я закончил. Вот мой вклад». Но из того, что я могу сказать, Swing не может предложить способ обнаружить намерение пользователя. Меня так же, как и вас, удивляет отсутствие такой функции, так как это, кажется, самая базовая функция формы в графическом интерфейсе. Нам нужно, но не нужно, событие dataEntered.
Есть обходной путь…
В аналогичном контексте (JTextField вместо JComboBox) Sun / Oracle Java Tutorial предоставляет пример InputVerificationDemo , где создается класс:
- Расширяет InputVerifier (для обработки вкладок / щелчков, когда фокус может быть потерян)
- Реализация ActionListener (для обработки нажатия клавиши Enter без выхода из поля)
Хорошая вещь в этом обходном пути заключается в том, что вы можете найти свой код обработки всего в одном месте. Недостатком является то, что у вас все еще есть проблемы: