Swing отличается от среды командной строки в том смысле, что у вас нет событий в окне консоли. Стандартный графический интерфейс работает с объектами и событиями. Консоль не имеет такого эквивалентного понятия.
То, что вы делаете , - это стандартный вход (а также стандартный вывод), с которого вы можете читать. См. в этом вопросе о том, как прочитать один символ с консоли (без ожидания перехода на новую строку), или, скорее, о том, как это не очень легко сделать в Java.
Конечно, вы всегда можете выполнять чтение асинхронно в отдельном потоке. то есть основной поток будет продолжать делать что-то, а поток слушателя ожидает вызова блокировки ввода / вывода. Но это может быть реализовано и обработано только на уровне приложения.