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

Класс определяет курсор как текущую позицию вида, предназначенную для вставки и удаления текста методом

Caret createCaret();

Опишем курсор подробнее.

Курсор

Курсор описан интерфейсом Caret и реализован классом DefaultCaret как тонкая вертикальная черта, отмечающая позицию между символами. Текущая позиция называется точкой (dot). Для работы с выделенным текстом отмечается еще одна позиция — другой конец выделенного текста — называемая меткой (mark). Пока выделения нет, метка совпадает с точкой. При перемещении точки методом moveDot (int) метка остается на месте и создается выделенный участок текста. При установке точки методом setDot (int) метка переносится в точку и выделение отменяется.

Выделенный текст можно отметить на экране или никак не отмечать. Это регулируется методом setSelectionVisible(boolean), а отслеживается логическим методом

isSelectionVisible().

Отследить положение точки и метки можно методами getDot ( ) и getMark (), возвращающими их линейную позицию в части Вид схемы MVC. Определить двумерную текущую позицию курсора можно методом

Point getMagicCaretPosition();

а установить — методом

void setMagicCaretPosition(Point);

Во время перемещения курсора эта позиция имеет значение null.

Визуализация курсора осуществляется методом paint(Graphics). Класс DefaultCaret расширяет класс Rectangle, определяя прямоугольник, внутри которого вычерчивается курсор.

Мерцание курсора можно задать методом setBlinkRate(int), в котором указывается задержка в миллисекундах.

Курсор можно показать на экране или убрать его с экрана методом setVisible(true), а проследить за этим-логическим методом isVisible().

Изменение положения курсора вызывает событие ChangeEvent, которое обрабатывается обычным образом. Кроме того, курсор реагирует на события мыши и изменение фокуса ввода, при этом метод paint(Graphics) может изменить форму и цвет курсора.

Таким образом, библиотека Swing предоставляет все возможности для создания курсора любого вида.

Ограничение перемещения курсора

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

Для того чтобы задать ограничения курсору, надо расширить класс NavigationFilter, переопределив следующие его методы:

П void setDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias) — определяет положение следующей позиции точки dot и метки курсора;

П void moveDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias) — определяет положение следующей позиции точки dot, оставляя метку на месте;

П int getNextVisualPositionFrom(JTextComponent tc, int pos, Position.Bias bias, int direction, Position.Bias[] biasRet) - вычисляет следующую позицию относительно

текущей позиции pos с учетом направления движения курсора direction. Стандартная реализация вызывает метод класса View с тем же названием.

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

setNavigationFilter(NavigationFilter) класса JTextComponent.

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

class CursorFilter extends NavigationFilter{

public void setDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias){ super.setDot(fb, (dot < 30)? dot:30, bias);

}

public void moveDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias){ super.moveDot(fb, (dot < 30)? dot:30, bias);

}

}

После этого определяем текстовый компонент и устанавливаем в него фильтр, например:

JTextArea ta = new JTextArea(5, 60); ta.setNavigationFilter(new CursorFilter());

Реализации редактора

Прямая реализация абстрактного класса EditorKit — класс DefaultEditorKit — кроме определения абстрактных методов вводит еще множество статических полей, задающих реакцию на нажатие специальных клавиш и перемещение курсора. Такой контроллер используется по умолчанию в компоненте JTextComponent.

Класс DefaultEditorKit расширяется классом StyledEditorKit. Этот класс позволяет внести в текст атрибуты, изменяющие стиль текста: шрифт, цвет, подчеркивание, курсив и другие. Такой редактор применяется по умолчанию в компоненте JTextPane.

От класса StyledEditorKit порождены два класса: HTMLEditorKit и RTFEditorKit, редактирующие тексты в форматах HTML и RTF. Возможности последнего класса пока сильно ограничены, а класс HTMLEditorKit собрал вокруг себя два пакета: javax.swing.text.html и j avax. swing. text. html .parser. Классы этих пакетов позволяют задать нестандартную интерпретацию тегов HTML, создать и применить описание DTD документа и таблицы стилей CSS, разработать свой интерпретатор (parser) документа HTML.

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

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

Java 7
Java 7

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

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

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

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

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

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