Запись ТОЛЬКО в последней строке текстового поля в Java SWT - PullRequest
0 голосов
/ 26 октября 2010

Я разрабатываю такую ​​программу, как Terminal в Linux или Command Prompt в Windows, но я разрабатываю ее для Linux, и меня не волнует переносимость.

Программа написана на Java, используя SWT.

Пользователь записывает команды в текстовое поле, и когда он нажимает «ввод», он читает эту строку и интерпретирует ее.

Проблема в том, что пользователь пишет свои командыв текстовое поле, поэтому он может свободно писать в любом месте внутри него.

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

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Я написал терминальный элемент управления в .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

1 голос
/ 26 октября 2010

Вы можете использовать 2 текстовых виджета для имитации сеанса терминала.

Один для ввода команды, а другой для отображения команды и ответа.

Записьтекстовый виджет должен принимать только 70 - 80 символов или около того.

Виджет текстового дисплея будет прокручиваться и отображать самые последние команды и ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...