Я написал терминальный элемент управления в .NET.Это не на Java, но я думаю, что вы можете использовать некоторые из логики там:
http://wpfterminal.codeplex.com/
Имейте в виду, что я не хотел выпустить этот проект так скоро, ясделал это для вас, так что может потребоваться небольшая очистка, а также несколько ошибок отслеживания.Но, во всяком случае, пока все работало без нареканий.
Вы можете увидеть пример на этом скриншоте (терминал интегрирован в более крупный проект):
http://images4.hiboox.com/images/4210/0a2809b63e05c3d0cac678962e0e3d5a.jpg
Мое решение
.
Основные механизмы
На самом деле я определил целое число lastPromptIndex
, и каждый раз, когда пользователь нажимает клавишу ВВОД и появляется новое приглашение, это значение обновляется.
После этого все просто, вам просто нужно обработать любой ввод текста, прежде чем текстовое поле подтвердит ввод.Если каретка текстового поля была расположена перед вашим lastPromptIndex
, вам необходимо вызвать ошибку (обычно звуковой сигнал), и вы должны сделать недействительным ввод текста, поэтому в текстовом поле ничего не пишется.Я также автоматически устанавливаю позицию каретки в конец текстового поля, чтобы пользователь мог сразу ввести некоторый текст.
Расширения
Вы можете включить завершение команды, выполнив поиск по клавише «ВВЕРХ»если каретка находится перед индексом подсказки и т. д. Вам просто нужно обработать входные события перед их отправкой во внутренние механизмы текстового поля.Я не знаю, позволяют ли это элементы управления SWT, но я уверен, что они делают, как любая серьезная система пользовательского интерфейса.
Другое решение
.
JTERM
Я помню, что мой друг использовал терминал в приложении Java, и в его источниках я обнаружил, что если это элемент управления из JTerm, взгляните на него:
http://www.acordex.com/vtj/JTerm.html