Многострочное текстовое поле


Содержание

Формы в HTML

Формы в HTML — это самая сложная, но с другой стороны, пожалуй самая интересная тема в HTML.

Веб-формы позволяют посетителям сайта внести в специальные поля ту или иную информацию, а разработчику ее получить в удобном для него виде.

Примером формы может служить гостевая книга, анкета, онлайн тест. Формы заполняют при регистрации на сайте, при оформлении заказов в интернет магазине и т.п.

Пользуясь HTML, Вы можете создать каркас формы: текстовые поля, меню, списки, кнопки, флажки и переключатели. То есть те элементы, при помощи которых в форму вносится определенная информация.

Затем данные, внесенные в форму, отправляются на сервер для обработки. Но HTML здесь бессилен — над обработкой формы уже работает программа или скрипт, который к ней привязывается. Такие программы обычно пишут на языке php или javascript.

Атрибуты формы — тег .

Атрибут action является обязательным для любой формы — он указывает адрес к файлу, который обслуживает форму (обрабатывает внесенные в нее данные).

Атрибут method определяет способ отправки содержимого формы. Существует два метода — GET и POST . Сейчас не имеет смысла вникать в эти параметры, так как тема отправки информации методами GET и POST относится к языкам обработки данных (например, PHP). Достаточно знать, что именно метод передачи данных POST в большинстве случаях используется в формах.

Атрибут name тега

Однострочное текстовое поле для ввода текста. Атрибут size задает ширину поля в символах.

«password» maxlength= «10» size= «20» >

Текстовое поле для ввода пароля.
Атрибут maxlength устанавливает максимальное количество символов, которое можно ввести

«radio» name= «radio» value= «1» checked>

«radio» name= «radio» value= «2» >

«radio» name= «radio» value= «3» >

Переключатель.
Возможен выбор лишь одного варианта из предложенных. Атрибут checked определяет заранее помеченное поле.

«checkbox» name= «flag» value= «1» checked>

«checkbox» name= «flag» value= «2» >

«checkbox» name= «flag» value= «3» >

Флажок.
Возможен выбор нескольких вариантов. Атрибут checked определяет заранее помеченное поле.

«button» value= «Кнопка» >

Кнопка.
Атрибут value устанавливает надпись на кнопке.

«reset» value= «Сбросить» >

Кнопка сброса.
Возвращает поля формы к их первоначальному виду. Сброс внесенных данных.

Кнопка для отправки внесенных данных.

Поле для ввода имени пересылаемого файла.

«image» src= «img/buttom.gif» >

Кнопка-изображение.
Служит также для отправки данных на сервер. Атрибут src указывает адрес файла с изображением.

Скрытое поле — невидимое для пользователя.

Раскрывающийся список — теги и

Тег также как и тег служит для сбора информации — он создает список, из которого возможен выбор одного или нескольких элементов. Каждому элементу соответствует какое-либо значение, которое и отправляется на сервер для обработки.

Вид создаваемого списка зависит от значения атрибута size : при size= «1» (значение по умолчанию) список будет раскрывающимся.

Иное значение атрибута size будет соответствовать количеству отображаемых пунктов списка. Например, при size= «3» , видимыми будут три элемента. Для просмотра остальных пунктов списка (если таковые есть) следует воспользоваться вертикальной полосой прокрутки, которая добавляется автоматически.

По умолчанию возможен выбор лишь одного элемента списка. Добавление атрибута multiple к тегу позволяет выбрать несколько пунктов списка с помощью мыши и клавиш Ctrl и Shift.

При наличии атрибута multiple , будут отображены все пункты списка или их часть (в зависимости от браузера), если атрибутом size не установлено определенное количество видимых пунктов.

Обязательным элементом раскрывающегося списка является тег . Он располагается внутри тега и создает каждый пункт списка.

При помощи атрибута name тега списку дается имя, а при помощи атрибута value тега элементу списка присваивают значение. Таким образом на сервер отправляется пара «имя=значение» — имя списка и значение выбранного элемента/ов.

Атрибут selected тега определяет заранее выделенный пункт списка, а атрибут disabled блокирует элемент списка — его нельзя выбрать.

JTextField, JTextArea, JTextPane

Пакет javax.swing.text библиотеки Swing содержит компоненты для работы с текстом. Мощные текстовые компоненты позволяют реализовать средства ввода и редактирования текста любой сложности, начиная от однострочного текстового поля и заканчивая многофункциональным текстовым редактором с разнообразными возможностями.

Основные возможности всех текстовых компонентов Swing и их базовая архитектура описаны в абстрактном классе JTextComponent. Именно от этого класса унаследованы все текстовые компоненты Swing, будь то простое текстовое поле или многофункциональный редактор. Помимо того что в данном базовом классе задаются общие для всех текстовых компонентов свойства и действия (такие как цвет выделенного текста, цвет самого выделения, курсор, сам текст, механизмы работы с буфером обмена), в нем описывается взаимодействие практически всех составных частей пакета javax.swing.text.

Текстовые компоненты имеют архитектуру MVC. Модель текстовых компонентов представлена довольно простым интерфейсом Document, который позволяет получать информацию об изменениях в документе и хранящийся в нем текст, а также при необходимости изменять полученный текст. Вид реализован в UI-представителях текстовых компонентов; но составляется он на основе специальных объектов Element и View, больше отвечающих именно текстовым компонентам. Благодаря этим объектам можно гибко настраивать и расширять внешний вид и структуру текстовых компонентов без вмешательства в сложный процесс их конечной прорисовки. Контроллер соединен с видом для обработки событий, как правило не связанных с клавиатурой, и частично реализован в виде карты клавиатуры (keymap). Карта клавиатуры позволяет гибко, без смены UI-представителя текстового компонента, менять реакцию текстового компонента на нажатия клавиш.

Ссылки на странице

  • Многострочное поле JTextArea
  • Текстовый редактор JEditorPane
  • Текстовый редактор JTextPane
  • Форматирование поля JFormattedTextField

Текстовые поля JTextField, JPasswordField

Текстовое поле JTextField является самым простым компонентом и наиболее часто встречающимся в пользовательских интерфейсах. Как правило, поле является однострочным и служит для ввода текста. В библиотеке Swing имеется два текстовых поля. Первое, представленное классом JTextField, позволяет вводить однострочный текст. Второе поле, реализованное классом JPasswordField и унаследованное от поля JTextField, дает возможность организовать ввод «закрытой» информации (чаще всего паролей), которая не должна напрямую отображаться на экране.

Оба текстовых поля JTextField, JPasswordField просты. Работа с ними чаще всего сводится к заданию количества отображаемых в поле символов и начального текста, если таковой требуется. После чего остается только поместить поле в контейнер и в нужный момент получить из него набранный пользователем текст.

Пример использования текстовых полей JTextField

В примере создается окно с несколькими текстовыми полями. Первое поле создается с помощью конструктора класса JTextField, которому передается максимальное количество символов в поле. Для однострочных текстовых полей прокрутка не нужна, и размер поля в символах должен примерно соответствовать объему информации, которую пользователь вводит в поле. Второе поле создается более функциональным конструктором: ему передатся текст, который будет записан в поле, и максимальное количество символов. Далее определяется шрифт и вариант выравнивания текста в поле. По умолчанию текст выравнивается по левому краю, в примере — по правому краю.

К текстовому полю можно присоединить слушателя событий ActionListener. Такие слушатели оповещаются о нажатии пользователем специальной клавиши, сигнализирующей об окончании ввода. Обычно это клавиша Enter. Использовать слушателя особенно удобно в случае текстовых полей, предназначенных для ввода важной информации. Присоединение к полю слушателя ActionListener позволяет ускорить процесс работы с интерфейсом, избавляя пользователя от необходимости по окончании ввода данных щелкать на подтверждающих кнопках подобных кнопке ОК. Помимо прямого присоединения к полю слушателя ActionListener можно также воспользоваться методом setAction(), присоединяющего к полю объект-команду Action. Применение этого метода не удаляет уже присоединенных к полю слушателей, все они также будут оповещаться о завершении ввода.

В примере также используется поле для ввода «закрытых» данных JPasswordField. Это поле унаследовано от обычного поля JTextField. Из собственных методов поля JPasswordField можно упомянуть лишь метод setEchoChar(), служащий для смены символа-заменителя. По умолчанию в качестве такого символа используется звездочка ‘*’. Разработчики класса JPasswordField не рекомендуют применять для получения введенного в поле значения (пароля) обычный метод getText(). Дело в том, что создаваемая данным методом строка String может кэшироваться (объекты String в Java максимально оптимизируются компилятором и виртуальной машиной), и злоумышленник сможет похитить ваш пароль сканированием памяти приложения. Для получения данных предоставляется более безопасный метод getPassword(), возвращающий массив символов char, значения которого после проверки имеет смысл обнулить и при желании вызвать сборщик мусора. Поле JPasswordField особым образом копирует данные в буфер обмена — оно переопределяет методы cut() и сору(), определенные в базовом классе JTextComponent, запрещая копировать набранный текст в буфер обмена.

Илон Маск рекомендует:  Установка apache

Метод setToolTipText() позволяет для каждого поля установить всплывающую «подсказку». Интерфейс окна представлен на следующем скриншоте.

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

Свойства текстовых полей

Свойства и методы get/set Описание
text Чтение введенного в поле текста или его замена. Для поля с конфиденциальной информацией лучше использовать метод getPassword()
columns Определение количества символов в поле; можно получить размер поля или изменить его
font Определение используемого в текстовом поле шрифта.
horizontalAlignment Управление выравниванием текста в поле. По умолчанию текст выравнивается по левой границе поля.
echoChar (только для JPasswordField) Определение символа-заменителя для ввода закрытой информации. По умолчанию используется символ звездочки (*)

Многострочное поле JTextArea

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

Для многострочных полей необходимо задавать не только ширину (максимальное количество символов), но и высоту(максимальное количество строк). JTextArea следует размещать в панелях прокрутки JScrollPane. Рассмотрим пример использования JTextArea.

В примере создается два многострочных текстовых полей JTextArea, для которых были изменены некоторые наиболее часто используемых свойства. Первое текстовое поле создается с помощью конструктора, заполняещего поле текстом и определяющего количество строк и символов. Следует обратить внимание, что количество строк идет в списке параметров перед количеством символов. Задаваемые в конструкторе количество строк и символов поля определяют его размер в контейнере, но не накладывают ограничений на объем вводимого текста. Для первого поля был изменен шрифт и определено нестандартное значение для табуляции вызывом метода setTabSize(). Данный метод позволяет указать, какое количество символов пробела будет замещать символ табуляции, вставляемый нажатием клавиши .

Второе текстовое поле создается с помощью конструктора, которому в качестве параметров передается количество строк и символов. После этого с использованием метода setText() определяется содержимое поля и меняются свойства, управляющие процессом переноса текста на новые строки. По умолчанию текст в поле JTextArea не переносится на новую строку. Изменить данное поведение позволяет метод setLineWrap(). Метод setWrapStyleWord() изменяет стиль переноса длинных слов на новые строки. Если вы передадите в этот метод значение true, то слова, не умещающиеся в строке, будут целиком переноситься на новую строку. По умолчанию значение этого свойства равно false. Это означает, что текст переносится, как только ему перестает хватать места в строке, независимо от того, в каком месте слова приходится делать перенос.

Текстовые поля добавляются в панель содержимого окна с использованием полос прокрутки JScrollPane. Необходимо отметить, что текстовое поле JTextArea не имеет собственной рамки. Полосы прокрутки решают данную проблему. Интерфейс окна представлен на следующем скриншоте.

Обратите внимание на разницу реализации переноса текста в двух компонентах JTextArea. Для переноса текста в левом поле приходится вручную нажимать клавишу Enter, а в правом поле перенос выполняется автоматически.

Свойства многострочных текстовых полей JTextArea

Свойства (и методы get/set) Описание
rows, columns Определение размеров многострочного текстового поля, в строках и символах соответственно. Изменить размеры поля можно в run-time, при этом поле JTextArea автоматически проведет проверку корректности и перерисовку контейнера.
lineWrap, wrapStyleWord Управление включением переноса текста по строкам и типом этого переноса. Когда перенос строк отключен, второе свойство не действует. Если перенос строк включен и второе свойство равно false, то перенос происходит в том месте, где заканчивается строка, независимо от того, в какой точке слова это случается. В противном случае перенос происходит по словам, которые не разбиваются на части, а переходят на новую строку целиком.
font Определение шрифта для многострочного текстового поля. Шрифт по умолчанию задается текущим менеджером внешнего вида.
lineCount, lineOfOffset,
lineStartOffset, lineEndOffset
(только методы get)
Данные методы позволяют получить информацию о распределении текста многострочного поля по строкам. Первый метод get дает общее количество строк текста в поле. Второй метод предоставляет возможность узнать, на какой строке поля находится символ с данным смещением от начала текста. Последние два метода действуют обратным образом: для заданного номера строки они позволяют узнать смещение символа, находящегося в начале строки и в конце строки.

Многострочное поле JTextArea обладает еще парой полезных методов. Метод append() позволяет присоединить к уже имеющемуся в поле тексту новую часть без удаления прежнего содержимого. Метод insert() дает возможность вставить в произвольную область находящегося в поле текста новую строку.

Текстовый редактор JEditorPane

Редактор JEditorPane является мощным инструментом для отображения на экране текста любого формата. Он поддерживает два широко распространенных формата: HTML и RTF (Rich Text Format — расширенный текстовый формат). Потенциально редактор JEditorPane может отображать текст любого формата, с любыми элементами и любым оформлением. Такую гибкость редактору обеспечивает фабрика классов EditorKit, в обязанности которой входит создание и настройка всех объектов, необходимых для отображения текста некоторого типа, в том числе модели документа (объекта Document), фабрики для отображения элементов документа ViewFactory, курсора и списка команд, поддерживаемых данным типом текста.

EditorKit также отвечает за правильное открытие и сохранение документа поддерживаемого ею формата. Так что возможности JEditorPane ограничены лишь наличием фабрик для различных текстовых форматов. Поддерживаемые стандартно форматы RTF и HTML описываются фабриками RTFEditorKit и HTMLEditorKit соответственно.

Для документов, включающих различного рода ссылки, редактор JEditorPane предоставляет слушателей HyperlinkListener. Эти слушатели оповещаются при активизации пользователем ссылки в документе. Слушателям передается URL-адрес активизированной ссылки, так что они могут заставить редактор немедленно перейти по этому адресу, вызвав все тот же метод setPage(), или использовать полученную информацию по своему усмотрению. Ссылки поддерживаются стандартной фабрикой HTMLEditorKit, необходимой для отображения HTML-документов, так что вы сможете сразу узнать, когда пользователь активизирует ссылку. Следует отметить, что ссылки активизируются, только когда редактирование текста запрещено (свойство editable равно false).

Рассмотрим пример создания браузера для просмотра HTML-документов с помощью редактора JEditorPane. Переходить с одной страницы на другую можно будет с помощью адресной строки или ссылок в текущем документе.

Интерфейс программы включает текстовое поле, в котором пользователь будет набирать адрес для перехода, и редактор JEditorPane для отображения страницы сайта по указанному в поле адресу. В панели JPanel будет располагаться текстовое поле для ввода адреса. В ней используется менеджер последовательного расположения FlowLayout с выравниванием по левому краю. К текстовому полю подключаем слушателя окончания ввода, реализованного во внутреннем классе URLAction. Когда пользователь заканчивает ввод, нажав специальную клавишу , вызывается метод слушателя actionPerformed(). В этом методе получаем текст, набранный в поле ввода адреса и методом setPage() загружаем в редактор новую страницу. В случае неудачи будет выведено краткое сообщение.

Интерфейс окна представлен на следующем скриншоте.

Для создания редактора JEditorPane в примере выбирается конструктор, который позволяет сразу же задать страницу для отображения. Далее методом setContentType() указаются типы документов, которые должен отображать редактор («text/html»). Для поддержки переходов по ссылкам редактирование должно быть отключено, т.е. свойство editable равно false. В заключение к редактору подключается слушатель типа HyperlinkListener, который будет получать информацию о событиях, происходящих со ссылками документа. Слушатель реализован во внутреннем классе LinkListener.

В метод hyperlinkUpdate() слушателя LinkListener поступает информация о событиях, происходящих со ссылками. В методе проверяется тип события. Если событием являлась активизация ссылки, то определяется адрес активизированной ссылки методом getURL() и редактор переводится на новую страницу методом setPage() с передачей ему полученного адреса. В случае ошибки на экран выводится краткое сообщение.

Следует отметить, что выбирать страницы для просмотра данным редактором нужно аккуратнее: ни языки сценариев, ни модули расширения, ни возможности HTML 4.0, к сожалению, не поддерживаются.

Текстовый редактор JTextPane

Унаследованный от JEditorPane текстовый редактор JTextPane незаменим при создании в приложении многофункционального текстового редактора. Обладая всеми возможностями своего родителя JEditorPane, класс JTextPane добавляет к нему то, без чего представить себе современные редакторы практически невозможно — разметку текста стилями. Для этого в нем используется специальная модель документа StyledDocument и настроенная на поддержку такой модели фабрика классов StyledEditorKit.

Текстовый редактор JTextPane использует стили Style для управления документом : установка шрифта и его размера, цвета символов, выравнивание текста и т.п. Стиль позволяет четко разделить внешний вид документа и текст. Для редактировании текста используется несколько стилей для выделения заголовков, основного текста, сносок и т.д. Текст, набранный с использованием стилей, изменяется автоматически.

Помимо стилей JTextPane поддерживают неупорядоченные наборы атрибутов текста, заданные объектами AttributeSet. Наборы атрибутов позволяют изменять произвольные фрагменты текста или даже целые абзацы, слегка отступая от комплекта заранее заданных стилей.

Cтили могут наследовать атрибуты других стилей. Так например, стиль основного текста может определять тип шрифта, его размер и выравнивание, а унаследованный стиль заголовка может изменить только размер шрифта. Использование стилей позволяет настраивать внешний вид и формат документа, не затрагивая текста.

Рассмотрим пример с использованием возможностей компонента JTextPane.

Структурно пример использования JTextPane включает несколько методов, в которых реализуются различные функции текстового редактора JTextPaneTest. В методе createStyles(editor) определяются стили для заголовка документа heading и остального текста normal. Для установки атрибутов стилей используются статические методы класса StyleConstants. Стиль заголовка heading наследует свойства стиля обычного текста normal.

Метод loadText(editor) загружает в редактор текст. Текст вставляется в компонент JTextPane посредством модели документа Document с ипользованием метода insertString(). Методу insertString() необходимо в качестве параметров указать строку и стиль. В примере вставку текста в документ выполняет вспомогательный метод insertText(), в котором строка добавляется в конец документа. Размещаемый в редакторе текст описан в локальном массиве TEXT.

Илон Маск рекомендует:  Ссылки внутри страницы

В примере демонстрируется изменение оформления произвольного фрагмента текста. Для этого используется метод setCharacterAttributes(), которому необходимо указать диапазон в тексте и стиль. Последний логический параметр указывает, нужно ли полностью заменить имеющийся стиль новым набором атрибутов или надо совместить имеющийся стиль с новым набором. При отказе от полной замены имеющегося стиля (3-й параметр равен false) будет выделена только часть заголовка.

Редактор JTextPane позволяет вставлять в документ визуальные компоненты. В примере были использованы флажок JCheckBox и кнопка JRadioButton. Предварительно компоненты были сделаны прозрачными (свойство opaque). Для размещения компонентов курсор был устанавливлен в конец документа методом setCaretPosition(). Вставка компонента в текущую позицию курсора выполняется методом insertComponent().

Представление документа в поле текстового редактора изображено на следующем скриншоте.

Форматирование текстового поля, JFormattedTextField

Текстовый компонент определения формата данных JFormattedTextField унаследован от обычного текстового поля JTextField. Он позволяет представлять данные согласно специальным текстовым форматам и маскам, а также ограничивает ввод пользователя, разрешая тому вводить данные только в соответствии с заданным в поле форматом.

Конструктор поля JFormattedTextField в качестве параметра получает форматирующий объект, унаследованный от абстрактного внутреннего класса AbstractFormatter. Когда в форматированное текстовое поле вводятся символы, то сразу же вызывается форматирующий объект, в задачу которого входит анализ введенного значения и принятие решения о соответствии этого значения некоторому формату. Основными составляющими форматирующего объекта являются фильтр документа DocumentFilter, который принимает решение, разрешать или нет очередное изменение в документе, а также навигационный фильтр NavigationFilter. Навигационный фильтр получает исчерпывающую информацию о перемещениях курсора в текстовом поле и способен запрещать курсору появляться в некоторых областях поля (таких как разделители номеров, дат и других данных, которые не должны редактироваться). Форматирующий объект также отвеачет за действие, которое предпринимается в случае ввода пользователем неверного значения (по умолчанию раздается звуковой сигнал).

В таблице представлен краткий перечень стандартных объектов.

Форматирующий объект Описание
MaskFormatter Организация ввода данных на основе простой маски, представляющая набор специальных символов, определяющих допустимые значения на определенных позициях поля. Подробное описание масок можно найти в интерактивной документации данного класса.
DateFormatter Определение формата даты. Для форматирования дат используется класс DateFormat из пакета java.text.
NumberFormatter Определение вводимых пользователем значений числа, записанные в определенном формате. Для форматирования чисел использует класс NumberFormat из пакета java.text.

Пример форматированного ввода по маске, MaskFormatter

Свойство placeholderCharacter определяет символ, который будет заменять незаполненные пользователем части маски. По умолчанию используется пробел. Но для маски мобильного телефона он не совсем подходит. Поэтому символ пробела заменен символом нуля.


Пример форматированного ввода даты, DateFormatter

Формат даты определяется объектом DateFormat. В классе DateFormat имеются несколько статических методов, позволяющих создавать стандартные форматы дат, принятых в различных странах (см. Интернационализация, i18n, l10n. В примере формат даты настраивается с использованием объекта SimpleDateFormat, который позволяет указать формат даты с помощью несложной текстовой маски. Полное описание правил создания таких масок можно найти в документации класса SimpleDateFormat. Наш формат даты содержит число месяца «dd», полное название месяца «ММММ», четырехзначное число года «уууу» и название дня недели «ЕЕЕЕ». Созданный формат даты передается в форматирующий объект DateFormatter, после чего у него настраивается несколько дополнительных свойств.

В отличие от объекта MaskFormatter форматирующий объект для дат DateFormatter по умолчанию разрешает ввод неверных, не соответствующих формату даты, значений. Методом setAllowsInvalid можно запретить ввод таких значений. Для удобства изменения даты включен режим перезаписи значений overwriteMode. По умолчанию работает режим вставки. Настроенный форматирующий объект передается в конструктор текстового поля. Новое значение даты в текстовом форматированном поле задается в методе setValue(). Форматирующий объект DateFormatter отвечает за преобразование объекта даты в текст.

Пример форматированного ввода вещественного числа, NumberFormatter

В примере формат представления чисел определяется объектом NumberFormat. Он имеет несколько статических методов для получения стандартных форматов чисел различных стран и языков (см. Интернационализация, i18n, l10n), однако мы применим для создания формата числа объект DecimalFormat. Данный объект позволяет настраивать формат числа с помощью несложной текстовой маски. В примере мы настроили маску для вещественных чисел с тремя знаками после запятой. В закомментированной строке представлен формат представления чисел в экспоненциальном формате: две десятичных цифры в самом числе, две возможных десятичных цифры в мантиссе. Число и мантисса разделяются точкой и заканчиваются нулями. Подробное описание маски для определения формата числа можно найти в документации класса DecimalFormat. Созданный формат числа присоединяется к форматирующему объекту NumberFormatter, а тот, в свою очередь, передается текстовому полю.

На следующем скриншоте представлен интерфейс окна примера FormattedTextFieldTest с использованием форматируемого поля JFormattedTextField. Исходный код примера вместе с остальными примерами, рассмотренными на этой странице, можно скачать здесь.

Модель документа Document

Текстовые компоненты библиотеки Swing имеют модель, в которой хранятся данные. В качестве данных выступает текст, набранный пользователем или вставленный программно. Модель всех текстовых компонентов описывается интерфейсом Document, который поддерживается текстовым компонентом JTextComponent. Методы интерфейса Document перечислены в таблице.

Метод Описание
getText(позиция, длина) Получение фрагмента текста, заданный начальной позицией и длиной. Позиция должна быть не меньше нуля и не больше длины текста, иначе возникнет исключение.
insertString(позиция, текст, атрибуты) Вставка текста в произвольную позицию документа.
remove(позиция, длина) Удаление из документа фрагмент текста, заданный позицией и длиной.
getLength() Получение длины текста, хранимого в модели документа.

Document хранит текст и позволяет сопоставлять ему наборы атрибутов AttributeSet. К атрибутам текста относится, шрифт и его размер, цвет текста и т.п. Следует отметить, что модель, используемая в текстовых полях, не сохраняет атрибуты; весь текст прорисовывается в едином виде. Модель, применяемая в редакторе JTextPane, сохраняет атрибуты текста и позволяет выводить текст в различном оформлении.

Для контроля за изменениями в текстовых полях Swing имеется событие DocumentEvent и его слушатель DocumentListener, который можно присоединить к модели Document. Событие DocumentEvent возникает каждый раз при изменении текста документа. В интерфейсе слушателя DocumentListener определены три метода; каждый из них вызывается при определенном типе события в документе: удалении removeUpdate(DocumentEvent e), обновлении changedUpdate(DocumentEvent e) или вставке insertUpdate(DocumentEvent e) текста.

Пример использования класса JTextField c модифицированным DocumentListener включен в архив примеров, рассмотренных на странице. В примере AutoCompleteFieldTest.java выполняется подстановка слова в текстовое поле по нескольким начальным символам.

Интерфейс Caret

Курсор текстовых компонентов реализовыван интерфейсом Caret. Курсор позволяет программно изменять текущую позицию в тексте и управлять выделенным текстом. Для работы с выделенным текстом в базовом классе JTextComponent имеется несколько методов, но изначально выделение текста находится в ведении текстового курсора.

Курсор имеет два основных свойства — его позиция dot и начальная позиция выделенного текста mark. Позиция курсора показывает, куда будут вставляться символы.

Курсор, описанный интерфейсом Caret, поддерживает событие ChangeEvent. Присоединив к курсору слушателя ChangeListener, можно получать информацию обо всех перемещениях курсора. Базовый класс JTextComponent поддерживает событие CaretEvent. Оно также запускается при перемещениях курсора. Но если событие ChangeEvent содержит только источник события (сам курсор), то событие CaretEvent позволяет сразу же узнать текущую позицию курсора и начало отсчета.

Пример использования класса курсора Caret включен в архив примеров, рассмотренных на странице. В примере CaretTest.java демонстрируется работа с методами курсора setDot(int position), moveDot(int position), setBlinkRate(int freq), getMark() и getDot().

Скачать примеры

Исходные коды примеров, рассмотренных на странице, можно скачать здесь (10 Кб).

HTML :: Ввод данных в форму в виде многострочного текста

Использование тега

Для ввода многострочного текста, например, при оставлении комментариев или отправки сообщений, в HTML 5 предусмотрен отдельный элемент ‘textarea’ , формирующийся парным тегом

(от англ. textarea – текстовая область). В отличие от текстового поля ‘input’ в элементе ‘textarea’ допустимо делать переносы строк, которые сохраняются при отправке данных на сервер. Отметим, что внутри контейнера ‘textarea’ разрешается писать любой текст, включая конструкции тегов. Этот текст будет отображаться браузером внутри текстового поля и при желании может быть удален пользователем во избежание отправки на сервер вместе с остальными данными.

Атрибуты rows и cols тега

Для того, чтобы задать ширину и высоту поля, используются атрибуты cols и rows . Атрибут cols принимает в качестве значения натуральные числа, которые определяют ширину текстового поля в виде количества символов моноширинного шрифта. По умолчанию принимает значение «20» . Поскольку ширина текстового поля ‘textarea’ зависит от текущего размера шрифта, то с увеличением или уменьшением размера шрифта будет изменяться и ширина поля в пикселях. Атрибут rows задает высоту текстового поля в строках (без прокрутки) и принимает в качестве значения натуральные числа. По умолчанию принимает значение «2» . Опять же, при изменении размера шрифта, изменяется и высота поля в пикселах.

Атрибут wrap тега

Чтобы сообщить браузеру, как осуществлять перенос строк в элементе ‘textarea’ используется атрибут wrap , который может принимать два значения:

  • «soft» – строки, которые не вмещаются в поле по ширине, автоматически переносятся на новую строку, при этом на сервер отправляется одна строка без разрывов; если же разрыв строки был добавлен при помощи клавиши Enter , то в процессе отправки данных на сервер он сохраняется; значение используется по умолчанию;
  • «hard» – строки, которые не вмещаются в поле по ширине, автоматически переносятся на новую строку, но при этом все переносы строк сохраняются в процессе отправки данных на сервер, включая и разрывы, сделанные клавишей Enter ; обязательным условием использования данного значения является наличие атрибута cols .
Илон Маск рекомендует:  Алгоритм пламени

Использование элемента ‘textarea’ показано в примере №1.

Пример №1. Использование атрибутов элемента ‘textarea’

Другие атрибуты тега

Кроме перечисленных атрибутов у элемента ‘textarea’ имеются атрибуты, аналогичные атрибутам элемента ‘input’: autofocus , disabled , form , maxlength , minlength , name , placeholder , readonly , required . Их можно посмотреть в нашем справочнике здесь.

Text – многострочное текстовое поле

В этом уроке рассмотрим, как с помощью Tkinter запрограммировать такой элемент интерфейса как многострочное текстовое поле. Этот виджет часто встречается при заполнении веб-форм. В приложениях для десктопов он редок, если не считать программы «Терминал», где по-сути вы работаете в большом текстовом поле.

В tkinter многострочное текстовое поле создается от класса Text. По умолчанию его размер равен 80-ти знакоместам по горизонтали и 24-м по вертикали.

Однако эти свойства можно изменять с помощью опций width и height. Есть возможность конфигурировать шрифт, цвета и другое.

Значение WORD опции wrap позволяет переносить слова на новую строку целиком, а не по буквам.

Text и Scrollbar

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

В tkinter скроллеры производятся от класса Scrollbar. Объект-скроллер связывают с виджетом, которому он требуется. Это не обязательно многострочное текстовое поле. Часто полосы прокрутки бывают нужны спискам, которые будут рассмотрены позже.

Здесь создается скроллер, к которому с помощью опции command привязывается прокрутка текстового поля по оси y – text.yview . В свою очередь текстовому полю опцией yscrollcommand устанавливается ранее созданный скроллер – scroll.set .

Методы Text

Основные методы у Text такие же как у Entry – get(), insert(), delete(). Однако, если в случае однострочного текстового поля было достаточно указать один индекс элемента при вставке или удалении, то в случае многострочного надо указывать два – номер строки и номер символа в этой строке (другими словами, номер столбца). При этом нумерация строк начинается с единицы, а столбцов – с нуля.

Методы get() и delete() могут принимать не два, а один аргумент. В таком случае будет обрабатываться только один символ в указанной позиции.

Особенностью текстового поля библиотеки Tk является возможность форматировать текст в нем, то есть придавать его разным частям разное оформление. Делается это с помощью методов tag_add() и tag_config(). Первый добавляет тег, при этом надо указать его произвольное имя и отрезок текста, к которому он будет применяться. Метод tag_config() настраивает тегу стили оформления.

Вставка виджетов в текстовое поле

В Text можно вставлять другие виджеты помощью метода window_creat(). Потребность в этом не велика, однако может быть интересна с объектами типа Canvas. Данный класс будет изучен позже. В примере ниже вставляется метка в текущую (INSERT) позицию курсора.

Размещение метки в функции позволяет каждый раз при вызове функции создавать новую метку. Иначе, если бы метка была в основной ветке программы, предыдущая исчезала бы.

Практическая работа

Напишите программу, состоящую из однострочного и многострочного текстовых полей и двух кнопок «Открыть» и «Сохранить». При клике на первую должен открываться на чтение файл, чье имя указано в поле класса Entry, а содержимое файла должно загружаться в поле типа Text.

При клике на вторую кнопку текст, введенный пользователем в экземпляр Text, должен сохраняться в файле под именем, которое пользователь указал в однострочном текстовом поле.

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

Для выполнения практической работы вам понадобится функция open() языка Python и методы файловых объектов чтения и записи. Освежить знания о них можно здесь.

Курс с примерами решений практических работ: android-приложение, pdf-версия.

Можно ли поле input type text сделать многострочным, как textarea?

1) Возможно ли поле input type text сделать многострочным и растягивающимся по вертикали, как textarea, но без использования textarea?

2) Возможно ли поле textarea сделать однострочным, как input type text, чтобы текст печатался в одну строку без перехода на следующую строку?

  • Вопрос задан более трёх лет назад
  • 1227 просмотров

Dmitry Pavlov Читал это уже. Ответов там нет, только нерабочие рекомендации типа сделай значение rows единицу – это не спасает.

Многострочное поле ввода на HTML

Как создать многострочное поле ввода на HTML? Вроде бы это

Поле можно поместить любой текст, который будет отображаться внутри поля.

Параметры
cols
Ширина поля в символах.
disabled
Блокирует доступ и изменение элемента.
name
Имя поля, предназначено для того, чтобы обработчик формы мог его идентифицировать.
readonly
Устанавливает, что поле не может изменяться пользователем.
rows
Высота поля в строках текста.
wrap
Параметры переноса строк.
Закрывающий тегОбязателен.

HTML :: Ввод данных в форму в виде многострочного текста

Использование тега

Для ввода многострочного текста, например, при оставлении комментариев или отправки сообщений, в HTML 5 предусмотрен отдельный элемент ‘textarea’ , формирующийся парным тегом

(от англ. textarea – текстовая область). В отличие от текстового поля ‘input’ в элементе ‘textarea’ допустимо делать переносы строк, которые сохраняются при отправке данных на сервер. Отметим, что внутри контейнера ‘textarea’ разрешается писать любой текст, включая конструкции тегов. Этот текст будет отображаться браузером внутри текстового поля и при желании может быть удален пользователем во избежание отправки на сервер вместе с остальными данными.

Атрибуты rows и cols тега

Для того, чтобы задать ширину и высоту поля, используются атрибуты cols и rows . Атрибут cols принимает в качестве значения натуральные числа, которые определяют ширину текстового поля в виде количества символов моноширинного шрифта. По умолчанию принимает значение «20» . Поскольку ширина текстового поля ‘textarea’ зависит от текущего размера шрифта, то с увеличением или уменьшением размера шрифта будет изменяться и ширина поля в пикселях. Атрибут rows задает высоту текстового поля в строках (без прокрутки) и принимает в качестве значения натуральные числа. По умолчанию принимает значение «2» . Опять же, при изменении размера шрифта, изменяется и высота поля в пикселах.

Атрибут wrap тега

Чтобы сообщить браузеру, как осуществлять перенос строк в элементе ‘textarea’ используется атрибут wrap , который может принимать два значения:

  • «soft» – строки, которые не вмещаются в поле по ширине, автоматически переносятся на новую строку, при этом на сервер отправляется одна строка без разрывов; если же разрыв строки был добавлен при помощи клавиши Enter , то в процессе отправки данных на сервер он сохраняется; значение используется по умолчанию;
  • «hard» – строки, которые не вмещаются в поле по ширине, автоматически переносятся на новую строку, но при этом все переносы строк сохраняются в процессе отправки данных на сервер, включая и разрывы, сделанные клавишей Enter ; обязательным условием использования данного значения является наличие атрибута cols .

Использование элемента ‘textarea’ показано в примере №1.

Пример №1. Использование атрибутов элемента ‘textarea’

Другие атрибуты тега

Кроме перечисленных атрибутов у элемента ‘textarea’ имеются атрибуты, аналогичные атрибутам элемента ‘input’: autofocus , disabled , form , maxlength , minlength , name , placeholder , readonly , required . Их можно посмотреть в нашем справочнике здесь.

Многострочное текстовое поле

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

Например, в карточке «Отчет» поле на закладке «Информация об отчете» является многострочным текстовым полем:

Рисунок 1.138. Многострочное текстовое поле

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

Рисунок 1.139. Контекстное меню многострочного текстового поля

Разновидностью многострочного текстового поля является текстовое поле запроса. Это поле выводится на закладке «Запрос» карточек добавления и редактирования отчетов, форматов и функций расчета скидок. В тексте запроса, вводимом в таком многострочном поле, производится автоматическое выделение синтаксических элементов запроса.

Рисунок 1.140. Многострочное поле запроса

Несколько строк ввода в

У меня есть этот ввод текста в форме:

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

Как сделать ввод больше похожим на текстовое поле?

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

Можно сделать многострочную текстовую вводную строку, присвоив ей атрибут word-break: break-word; . (Проверено только в Chrome)

Многострочный текст. Многострочное текстовое поле

Последнее обновление: 08.04.2020

Однострочное текстовое поле создается с помощью элемента input , когда его атрибут type имеет значение text:

С помощью ряда дополнительных атрибутов можно настроить текстовое поле:

dirname : устанавливает направление текста

maxlength : максимально допустимое количество символов в текстовом поле

pattern : определяет шаблон, которому должен соответствовать вводимый текст

placeholder : устанавливает текст, который по умолчанию отображается в текстовом поле

readonly : делает текстовом поле доступным только для чтения

required : указывает, что текстовое поле обязательно должно иметь значение

size : устанавливает ширину текстового поля в видимых символах

value : устанавливает значение по умолчанию в текстовом поле

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL