Можно ли печатать текст, который может редактировать пользователь (для консольных программ)? - PullRequest
3 голосов
/ 12 октября 2009

Скажем, я позволяю пользователю редактировать что-то, например, номер телефона в адресной книге (на самом деле, именно это я и делаю).Есть ли что-то, что я могу добавить в println, что позволит мне вставить переменную для отображения в виде полностью редактируемого текста?Задание, для которого я делаю это, на самом деле не требует этого, но я думаю, что было бы здорово иметь.Я смотрю в Google, но ничего не могу найти, но опять же, я не знаю, что я ищу, и имею ли я в виду правильные термины ...

Ответы [ 3 ]

3 голосов
/ 12 октября 2009

Нет, не используя только то, что Java предоставляет в рамках. Редактирование некоторого текста потребует

  1. действует при нажатии клавиши, что невозможно, поскольку в Java ввод буферизуется (т. Е. Ждите нажатия клавиши Enter)
  2. для перемещения по тексту, который вы выводите, что также невозможно

Это можно сделать с помощью некоторого нативного кода (ncurse в linux, ...), используя JNI или JNA, но не так просто.

Обратите внимание, что есть некоторые проекты, которые нацелены на добавление этих функций, поэтому, если вы можете использовать что-то за пределами основных библиотек, вы можете попробовать их ... например http://code.google.com/p/java-console-api/

1 голос
/ 12 октября 2009

Существуют различные варианты для этого, в порядке простоты и переносимости к особенностям и сложности:

  1. Просто запросите информацию, прочитав полную (возвращаемую-завершенную) строку ответа, и разрешите использовать обычные средства ввода с терминала для базового редактирования.

  2. Используйте что-то вроде библиотеки gnu readline для более продвинутого редактирования. У вас все равно не будет виджетов (текстовых полей ввода в определенных местах на экране) как таковых. Здесь есть реализация Java: http://java -readline.sourceforge.net /

  3. Используйте что-то вроде ncurses для точного позиционирования курсора, печати текстовых меток, обработки нажатий клавиш и реализации собственного поля ввода текста. Не весело.

  4. Используйте библиотеку текстового интерфейса пользователя (TUI), например, такую: http://www.bmsi.com/tuipeer/

0 голосов
/ 12 октября 2009

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

Но, если вы используете версию java со сценарием, вы можете написать свою собственную оболочку, а затем сделать то, что вы просите, так как оболочка не перестанет выполняться.

Но это, вероятно, будет за пределами вашего курса.

...