Читаем Java 7 полностью

Как видите, схема MVC получила в компоненте JTextComponent развитое детальное воплощение. Разработчик при желании может совершенно изменить стандартную реализацию текстовых компонентов. Правда, нужда в этом возникает редко. Чаще всего приходится переопределять метод insertString (), чтобы наложить какие-то ограничения на вводимые символы. Примеры этому будут даны далее.

Как принято в библиотеке Swing, класс JTextComponent дублирует многие методы своей схемы MVC. Большинство действий с текстовым компонентом можно выполнить без непосредственного обращения к Модели, Виду и Контроллеру компонента.

Раскладка клавиатуры

Еще одна возможность, заложенная в класс JtextComponent, — задать раскладку клавиатуры для ввода текста.

Для обеспечения такой возможности при нажатии или отпускании клавиши создается объект класса KeyStroke. Он содержит код клавиши и состояние клавиш-модификаторов , , и .

Класс KeyStroke предоставляет "фабричные" методы для создания своих объектов одним из следующих статических методов:

П KeyStroke getKeyStroke(char keyChar) — задается символ keyChar, отвечающий нажатию клавиши;

П KeyStroke getKeyStroke(int keyCode, int modifiers) — задается код клавиши keyCode константой вида vk_* класса KeyEvent и отмечается нажатие клавиш , , и в виде побитовой дизъюнкции констант shift_mask, alt_mask, CTRL_MASK и META_MASK класса InputEvent. Отсутствие модификаторов отмечается нулем;

П Keystroke getKeyStroke(Character keyChar, int modifiers) — символ задается объектом класса Character;

П Keystroke getKeyStroke(int keyCode, int modifiers, boolean onRelease) — последний параметр отмечает, что объект создается при нажатии (false) или отпускании клавиши (true);

П Keystroke getKeyStroke(String keyString) — все параметры записаны в одну строку keyString. Правила записи приведены в документации.

Полученный в результате нажатия или отпускания клавиши объект класса KeyStroke используется затем объектом, реализующим интерфейс Keymap. Этот объект задает реакцию на нажатие клавиши в виде объекта, реализующего интерфейс Action, и хранит набор пар "клавиша- действие" типа "Keystroke-Action". Интерфейс Action описан в

главе 14.

Такой механизм задания реакции на действия с клавиатурой заменяет обычную обработку событий клавиатуры через добавление слушателя к текстовому компоненту.

Новая пара "клавиша — действие" добавляется в набор методом

void addActionForKeyStroke(KeyStroke key, Action a);

Весь набор действий в виде массива типа Action[] можно получить методом

getBoundActions(), а набор объектов KeyStroke[] — методом getBoundKeyStrokes(). Отдельное действие Action возвращается методом getAction(KeyStroke).

Объекты типа Keymap можно связать в цепочку, задав родительский объект методом setResolveParent(Keymap). Если пара "клавиша — действие" не окажется найденной в данном объекте, то она будет отыскиваться в родительском объекте и далее по цепочке.

Библиотека Swing не реализует интерфейс Keymap открытым классом. Вместо этого реализация осуществляется закрытым полем класса JTextComponent. При создании текстового компонента это поле заполняется раскладкой по умолчанию default_keymap. Получить текущую раскладку можно методом getKeymap (), а установить новую — методом setKeymap (Keymap). Добавить новую раскладку в цепочку можно статическим методом

addKeymap(String name, Keymap parent);

Печать текста документа

Несколько логических методов print () класса JTextComponent вызывают появление на экране стандартного диалогового окна печати, помогающего выбрать принтер и распечатать на нем содержимое компонента. Методы возвращают false, если пользователь отменил печать, щелкнув мышью по кнопке Cancel в диалоговом окне, и true в противном случае.

П print () — печать текста компонента без колонтитулов.

П print(MessageFormat header, MessageFormat footer) — добавляется печать верхнего header и нижнего footer колонтитулов, оформленных как объекты класса

MessageFormat из пакета java.text.

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

Поле ввода JTextField

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

Однострочное поле ввода создается одним из конструкторов:

П JTextField(int columns) — пустое поле ввода с окном, размер которого достаточен для размещения columns символов. В поле можно вводить сколько угодно символов, окно будет прокручиваться;

П JTextField (String text) -поле ввода с начальным текстом text;

П JTextField (String text, int columns) -поле ввода с начальным текстом text и шири

ной columns символов;

П JTextField(Document doc, String text, int columns) — задается модель данных doc.

Модель данных можно заменить методом setDocument(Document). Допустимо заменять не всю модель, а только шрифт методом setFont ( Font).

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных