Java 7.
- Введение. ⇢
- ЧАСТЬ I. Базовые конструкции языка Java. ⇢
- Встроенные типы данных, операции над ними. ⇢
- Листинг 1.1. Первая программа на языке Java.
- Листинг 1.2. Первая программа с комментариями.
- Целые.
- Действительные.
- Символы.
- Строки.
- Логический тип.
- Логические операции.
- Упражнения.
- Целые типы.
- Операции над целыми типами.
- Упражнения.
- Вещественные типы.
- Операции присваивания.
- Упражнения.
- Условная операция.
- Упражнения.
- Приоритет операций.
- Блок.
- Операторы присваивания.
- Условный оператор.
- Листинг 1.4. Вычисление корней квадратного уравнения.
- Упражнения.
- Операторы цикла.
- Оператор continue и метки.
- Оператор break.
- Упражнения.
- Оператор варианта.
- Многомерные массивы.
- Затем определяем внешний массив и его размерность…
- Становится ясно, что с — массив, состоящий из трех элементов-массивов. Теперь определяем его элементы-массивы…
- После этих определений переменная c.length равна 3, c[0] .length равна 2, c[1] .length равна 4 и c[2]. length равна 3.
- Двумерный массив в Java не обязан быть прямоугольным.
- Описания можно сократить…
- А начальные значения задать так…
- В листинге 1.6 приведен пример программы, вычисляющей первые 10 строк треугольника Паскаля, заносящей их в треугольный массив и выводящей его элементы на экран. Рисунок 1.4 показывает вывод этой программы.
- Листинг 1.6. Треугольник Паскаля.
- Объектно-ориентированное программирование в Java. ⇢
- Абстракция.
- Иерархия.
- Ответственность.
- Модульность.
- Принцип KISS.
- Упражнения.
- Листинг 2.1. Нахождение корня нелинейного уравнения методом бисекции.
- Передача аргументов в метод.
- Перегрузка методов.
- Переопределение методов.
- Реализация полиморфизма в Java.
- Листинг 2.2. Пример полиморфного метода.
- Упражнения.
- Упражнение.
- Класс Complex. ⇢
- зике и технических дисциплинах. Но класс, описывающий комплексные числа, почему-то не включен в стандартную библиотеку Java. Восполним этот пробел.
- Листинг 2.4 длинный, но просмотрите его внимательно, при обучении языку программирования очень полезно чтение программ на этом языке. Более того, только программы и стоит читать, пояснения автора лишь мешают вникнуть в смысл действий (шутка).
- Листинг 2.4. Класс Complex.
- На рис. 2.3 показан вывод этой программы.
- Листинг 2.5. Передача аргументов в метод main().
- Листинг 2.7. Вложенные классы.
- Пакеты, интерфейсы и перечисления. ⇢
- Листинг 3.1. Файл Base.java с описанием пакета pi.
- Листинг 3.5. Общие свойства перечислений.
- Как видите, теперь константы создаются конструктором, определяющим для каждой константы поле value. А сейчас можно применить полученное перечисление Lights для регулирования дорожного движения. Это сделано в листинге 3.6.
- Листинг 3.6. Система управления светофором с перечислением.
- Листинг 3.7. Простейший калькулятор.
- Схема проектирования MVC.
- Шаблон Singleton.
- Листинг 3.8. Схема Singleton.
- ЧАСТЬ II. Использование классов из Java API. ⇢
- Классы-оболочки и generics. ⇢
- Листинг 4.1. Методы числовых классов.
- Листинг 4.3. Настраиваемые классы — параметры методов.
- Шаблон типа (wildcard type).
- Листинг 4.4. Настраиваемый метод.
- Класс Boolean. ⇢
- Класс Character. ⇢
- □ isJavaIdentifierStart () — определяет, может ли символ начинать идентификатор;
- □ isLetter () — проверяет, является ли символ буквой Java;
- □ isLetterOrDigit () — проверяет, является ли символ буквой или цифрой Unicode;
- □ isLowerCase () — определяет, записан ли символ в нижнем регистре;
- □ isSpaceChar () — выясняет, является ли символ пробелом в смысле Unicode;
- □ isTitleCase () — проверяет, является ли символ титульным;
- □ isUnicodeIdentifierPart ( ) - выясняет, можно ли использовать символ в именах.
- Unicode;
- □ isUnicodeIdentifierStart () — проверяет, является ли символ буквой Unicode;
- □ isUpperCase () — проверяет, записан ли символ в верхнем регистре;
- □ isWhitespace () — выясняет, является ли символ пробельным.
- Точные диапазоны управляющих символов, понятия верхнего и нижнего регистра, титульного символа, пробельных символов лучше всего посмотреть в документации Java API.
- Листинг 4.5 демонстрирует использование этих методов, а на рис. 4.3 показан вывод этой программы.
- В класс Character вложены классы Subset и UnicodeBlock, причем класс UnicodeBlock и еще один класс, InputSubset, являются расширениями класса Subset, как это видно на рис. 4.1. Объекты этого класса содержат подмножества кодировки Unicode.
- Следует заметить, что каждая новая версия Java добавляет новые методы в класс Character, поэтому точный состав методов лучше посмотреть по документации.
- Класс BigInteger. ⇢
- □ max(x) — наибольшее из значений объекта this и аргумента x;
- □ min(x) — наименьшее из значений объекта this и аргумента x;
- □ mod(x) — остаток от деления объекта this на аргумент метода x;
- □ modInverse (x) — остаток от деления числа, обратного объекту this, на аргумент x;
- □ modPow(n, m) — остаток от деления объекта this, возведенного в степень n, на m;
- □ negate () — перемена знака числа, хранящегося в объекте;
- □ not () — операция отрицания -this;
- □ or(x) — операция побитовой дизъюнкции this | x;
- □ pow(n) — операция возведения числа, хранящегося в объекте, в степень n;
- □ remainder(x) — операция взятия остатка от деления this % x;
- □ shiftLeft (n) — операция сдвига влево this << n;
- □ shiftRight (n) — операция арифметического сдвига вправо this >> n;
- □ xor(x ) — операция "исключающее ИЛИ" this л x.
- В листинге 4.6 приведены примеры использования данных методов, а рис. 4.4 показывает результаты выполнения этого листинга.
- Класс BigDecimal. ⇢
- Листинг 4.9. Методы класса class в программе ciassTest.
- Работа со строками. ⇢
- Как создать строку.
- Листинг 5.1 показывает различные случаи записи кириллического текста. В нем создаются три массива байтов, содержащих слово "Россия" в трех кодировках…
- □ массив byteCp1251 содержит слово "Россия" в кодировке CP1251;
- □ массив byteCp866 содержит слово "Россия" в кодировке CP866;
- □ массив byteKOI8R содержит слово "Россия" в кодировке KOI8-R.
- Из каждого массива создаются по три строки с использованием трех кодовых таблиц.
- Кроме того, из массива символов c[] создается строка s1, из массива байтов, записанного в кодировке CP866, создается строка s2. Наконец, создается ссылка s3 на строку-константу.
- Листинг 5.1. Создание кириллических строк.
- Все эти данные выводятся на консоль MS Windows 2000, как показано на рис. 5.1.
- Упражнение.
- Сцепление строк.
- Как узнать длину строки.
- Как выбрать символы из строки.
- Как выбрать подстроку.
- Как разбить строку на подстроки.
- Как сравнить строки.
- Как найти символ в строке.
- Как найти подстроку.
- Как изменить регистр букв.
- Как заменить отдельный символ.
- Как заменить подстроку.
- Как убрать пробелы в начале и конце строки.
- Как преобразовать в строку данные другого типа.
- Упражнения.
- Класс StringBuilder. ⇢
- Конструкторы.
- Как добавить подстроку.
- Как вставить подстроку.
- Как удалить подстроку.
- Как удалить символ.
- Как заменить подстроку.
- Как перевернуть строку.
- Листинг 5.2. Разбиение строки на слова.
- Классы-коллекции. ⇢
- Как создать вектор.
- Как добавить элемент в вектор.
- Как заменить элемент.
- Как узнать размер вектора.
- Как обратиться к элементу вектора.
- Как узнать, есть ли элемент в векторе.
- Как узнать индекс элемента.
- Как удалить элементы.
- Листинг 6.1. Работа с вектором.
- Листинг 6.2. Проверка парности скобок.
- Класс Hashtable. ⇢
- Как создать таблицу Hashtable.
- Как заполнить таблицу Hashtable.
- Как получить значение по ключу.
- Как узнать наличие ключа или значения.
- Как получить все элементы таблицы Hashtable.
- Как удалить элементы.
- Листинг 6.3. Телефонный справочник.
- Листинг 6.4. Вывод системных свойств.
- Интерфейс SortedSet.
- Вложенный интерфейс Map.Entry.
- Интерфейс SortedMap.
- Листинг 6.5. Использование итератора вектора j.
- Двунаправленный список.
- Дек.
- Упражнение.
- Связанные отображения.
- Упорядоченные отображения.
- Листинг 6.6. Сравнение комплексных чисел.
- Упражнение.
- Связанные множества.
- Упорядоченные множества.
- Листинг 6.7. Хранение комплексных чисел в упорядоченном виде !
- Методы класса Collections.
- Упражнение.
- Классы-утилиты. ⇢
- Сортировка массива.
- Бинарный поиск в массиве.
- Заполнение массива.
- Копирование массива.
- Сравнение массивов.
- Представление массива строкой.
- Получение хеш-кода массива.
- Часовой пояс и летнее время.
- Представление даты и времени.
- ЧАСТЬ III. Создание графического интерфейса пользователя и апплетов. ⇢
- Принципы построения графического интерфейса. ⇢
- Листинг 8.1. Слишком простое окно приложения AWT.
- Листинг 8.2. Простое окно приложения.
- Листинг 8.4. Простое окно приложения Swing.
- System Tray.
- Splash Screen.
- Графические примитивы. ⇢
- Как задать цвет.
- Упражнение.
- Как нарисовать чертеж.
- Упражнение.
- Прочие методы класса Graphics.
- Как вывести текст.
- Как установить шрифт.
- Как задать шрифт.
- Большая часть этого файла занята сопоставлениями логических и физических имен. Вы видите, что…
- □ логическому имени "dialog" сопоставлено имя семейства "Arial";
- □ логическому имени "dialoginput" сопоставлено имя семейства "Courier New";
- □ логическому имени "serif" сопоставлено имя семейства "Times New Roman";
- □ логическому имени "sansserif" сопоставлено имя семейства "Arial";
- □ логическому имени "monospaced" сопоставлено имя семейства "Courier New".
- Там, где указан стиль: dialog.italic, dialog.bold и т. д., подставлен соответствующий физический шрифт.
- В строках листинга 9.1, начинающихся со слова filename, указаны файлы с соответствующими физическими шрифтами, например…
- Эти строки необязательны, но они ускоряют поиск файлов со шрифтами.
- Листинг 9.2. Использование графических примитивов и шрифтов.
- Упражнение.
- Листинг 9.3. Преобразование пространства пользователя.
- Упражнение.
- Листинг 9.4. Определение перьев.
- В классе TextLayout есть не только более двадцати методов getXXX(), позволяющих узнать различные сведения о тексте, его шрифте и контексте, но и метод.
- вычерчивающий содержимое объекта класса TextLayout в графической области g, начиная с точки (x, y) .
- Еще один интересный метод,
- возвращает контур шрифта в виде объекта Shape. Этот контур можно затем заполнить по какому-нибудь образцу или вывести только контур, как показано в листинге 9.6.
- Листинг 9.6. Вывод текста средствами Java 2D.
- Визуализацию (rendering) созданной графики можно усовершенствовать, установив метод улучшения (hint) одним из методов класса Graphics2D…
- Ключи — методы улучшения — и их значения задаются константами класса RenderingHints, некоторые из них перечислены в табл. 9.2.
- Не все графические системы обеспечивают выполнение этих методов, поэтому задание указанных атрибутов не означает, что определяемые ими методы будут применяться на самом деле.
- Вот как может выглядеть начало метода paint () с указанием методов улучшения визуализации…
- Упражнение.
- Основные компоненты AWT. ⇢
- Класс Component. ⇢
- Как создать свой курсор.
- Упражнение.
- События.
- Класс Container. ⇢
- События.
- События.
- События.
- События.
- Как создать группу радиокнопок.
- Листинг 10.1. Размещение компонентов.
- События.
- События.
- Кроме событий класса Component — ComponentEvent, FocusEvent, KeyEvent, MouseEvent — при двойном щелчке кнопкой мыши на выбранном пункте происходит событие ActionEvent.
- В листинге 10.2 с помощью классов Choice и List задаются компоненты, аналогичные компонентам листинга 10.1, а рис. 10.2 показывает, как изменится при этом интерфейс.
- Строка ввода TextField.
- Поле ввода TextArea.
- Листинг 10.3. Поля ввода.
- События.
- Листинг 10.4. Линейки прокрутки для выбора цвета.
- В листинге 10.4 использован контейнер Panel. Рассмотрим возможности этого класса.
- Контейнер Panel — это невидимый компонент графического интерфейса, служащий для объединения нескольких других компонентов в один объект типа Panel.
- Класс Panel очень прост, но важен. В нем всего два конструктора…
- □ Panel ( ) -создает контейнер с менеджером размещения по умолчанию FlowLayout;
- □ Panel (LayoutManager layout) — создает контейнер с указанным менеджером размещения компонентов layout.
- После создания контейнера в него добавляются компоненты унаследованным методом.
- и т. д. Размещает компоненты в контейнере его менеджер размещения, о чем мы поговорим в следующей главе.
- События.
- События.
- Листинг 10.5. Создание двух окон.
- События.
- События.
- Компонент Canvas.
- Листинг 10.7. Кнопка с рисунком.
- Создание "легкого" компонента.
- Листинг 10.8. Создание круглой кнопки.
- Упражнение.
- Листинг 10.9. Программа рисования с меню.
- Листинг 10.10. Программа рисования со всплывающим меню.
- Оформление ГИП компонентами Swing. ⇢
- Листинг 11.1. Шаблон приложения, использующего Swing.
- Компонент JComponent.
- Схема MVC в компонентах Swing.
- Надпись JLabel.
- Кнопки.
- Листинг 11.2. Простейшая кнопка с двумя состояниями.
- Листинг 11.3. Группа радиокнопок.
- Упражнение.
- Раскрывающийся список JComboBox.
- Список выбора JList.
- Визуализация элементов списков.
- Упражнение.
- Счетчик JSpinner.
- Полосы прокрутки JScrollBar.
- Ползунок JSlider.
- Упражнение.
- Дерево объектов JTree.
- Построение меню средствами Swing.
- Панель выбора цвета JColorChooser.
- Упражнение.
- Окно выбора файла JFileChooser.
- же еще одно окно выбора файла. Вот, например, класс, формирующий окно предварительного просмотра файлов с изображениями…
- После определения объекта класса JFileChooser, но до его вывода на экран, присоединяем этот компонент…
- Получившееся окно открытия файла показано на рис. 11.5.
- В окне выбора файла перед каталогами и файлами выводятся стандартные значки. Их можно заменить какими-то другими изображениями. Для этого надо расширить абстрактный класс FileView, переопределив пять его методов, и установить новые изобра-
- жения методом setFileView(FileView). Например, выведем перед исходными файлами Java изображение дымящейся чашечки кофе…
- Теперь достаточно к описанию объекта fch класса JFileChooser добавить строку.
- и стандартный значок перед исходными файлами Java с расширением java будет заменен изображением из файла javacup.gif, как показано на рис. 11.5.
- Более содержательный пример создания окна выбора файла имеется в составе J2SE JDK в каталоге $JAVA_HOME/demo/jfc/FileChooserDemo/.
- Текстовые компоненты. ⇢
- Компонент JTextComponent. ⇢
- Модель данных — документ.
- Вид.
- Контроллер — редактор текста.
- Раскладка клавиатуры.
- Печать текста документа.
- Редактор объектов JFormattedTextField. ⇢
- Таблицы. ⇢
- Листинг 13.1. Простое определение таблицы.
- Модель ячеек таблицы.
- Остальные методы переопределяются по усмотрению разработчика. Но если этого не сделать, то получится нередактируемая таблица только для чтения, поскольку метод.
- isEditable () в классе AbstractTableModel возвращает false, а метод setValueAt () пуст. Для того чтобы таблица стала редактируемой, надо переопределить и эти два метода.
- В листинге 13.2 приведен пример расширения класса AbstractTableModel — модель ячеек таблицы, запрещающая редактировать первый столбец таблицы.
- Листинг 13.2. Модель запрещает редактировать первый столбец.
- Свойства столбца таблицы TableColumn.
- Модель столбцов таблицы.
- Заголовки столбцов таблицы JTableHeader.
- Листинг 13.4. Отдельный вывод заголовка таблицы.
- Модель выделения ячеек.
- Листинг 13.5. Несколько строк в одной ячейке таблицы.
- Листинг 13.6. Разные редакторы ячеек таблицы.
- Вы знаете, что, работая с электронными таблицами, такими как MS Excel, можно отсортировать строки таблицы по какому-нибудь столбцу, просто щелкнув мышью по заголовку столбца. Повторный щелчок вызовет сортировку в обратном порядке.
- Такая возможность есть и в классе JTable. Самый простой способ реализовать ее — это включить сортировку методом setAutoCreateRowSorter(true)…
- дана константа FIT_WIDTH вложенного в класс JTable перечисления JTable.PrintMode, или не будут — константа normal.
- □ print () — печать содержимого таблицы без колонтитулов со сжатием столбцов в режиме JTable. PrintMode. FIT_WIDTH.
- Остальные, более сложные методы печати используют сервер печати, что выходит за.
- рамки нашей книги.
- Примеры создания таблиц и связи их с базами данных имеются в документации Java SE.
- в каталоге $JAVA_HOME/demo/jfc/TableExample/.
- Размещение компонентов и контейнеры Swing. ⇢
- Менеджер FlowLayout. ⇢
- Листинг 14.1. Менеджер размещения FlowLayout.
- Менеджер BorderLayout. ⇢
- Листинг 14.2. Менеджер размещения BorderLayout.
- Листинг 14.3. Сложная компоновка.
- Менеджер GridLayout. ⇢
- Листинг 14.4. Менеджер GridLayout.
- Менеджер CardLayout. ⇢
- Менеджер GridBagLayout. ⇢
- Панель JPanel.
- Панель прокрутки JScrollPane.
- Двойная панель JSplitPane.
- Панель с вкладками JTabbedPane.
- Линейная панель Box.
- Листинг 14.8. Размещение компонентов на панели Box.
- Менеджер размещения SpringLayout.
- Панель инструментальных кнопок JToolBar.
- Слоеная панель JLayeredPane.
- Корневая панель JRootPane.
- Диалоговое окно JDialog.
- Окно верхнего уровня JFrame.
- Внутреннее окно JInternalFrame.
- обрезано границами внешнего окна. В листинге 14.11 приведена программа, создающая эти окна.
- Листинг 14.11. Внутренние окна.
- Рабочий стол JDesktopPane.
- Листинг 14.12. Внутренние окна на внутреннем рабочем столе.
- Стандартные диалоги JOptionPane.
- Окно с индикатором ProgressMonitor.
- Листинг 14.13. Создание окна индикатора.
- В заключение нужно сказать, что следить за загрузкой большого входного потока класса Inputstream удобно с помощью специально разработанного фильтра входного потока — класса ProgressMonitorInputStream, расширяющего класс FilterInputStream.
- Все менеджеры размещения написаны полностью на языке Java, в состав Sun Java SE входят их исходные тексты. Если вы решили написать свой менеджер размещения, реализовав интерфейс LayoutManager или LayoutManager2, то посмотрите эти исходные.
- тексты.
- Обработка событий. ⇢
- Листинг 15.1. Обработка события ActionEvent.
- Листинг 15.2. Самообработка события ActionEvent.
- Листинг 15.3. Обработка вложенным классом.
- Упражнение.
- Событие ActionEvent. ⇢
- Листинг 15.4. Простейшая программа рисования.
- При создании класса-с^шателя Scribble и реализации интерфейсов MouseListener и MouseMotionListener пришлось реализовать все их семь методов, хотя мы отслежива-
- ли только нажатие кнопки и перемещение мыши, и нам нужны были лишь методы mousePressed ( ) и mouseDragged( ). Для остальных методов мы задали пустые реализации.
- Чтобы облегчить задачу реализации интерфейсов, имеющих более одного метода, созданы классы-адаптеры.
- Упражнение.
- Классы-адаптеры представляют собой пустую реализацию интерфейсов-слушателей,
- имеющих более одного метода. Их имена составляются из имени события и слова.
- "Adapter". Например, для действий с мышью есть два класса-адаптера. Выглядят они.
- очень просто…
- Листинг 15.5. Событие колесика мыши.
- Упражнение.
- Событие ComponentEvent. ⇢
- Событие ContainerEvent. ⇢
- Ообытие FocusEvent. ⇢
- Событие ItemEvent. ⇢
- Событие AdjustmentEvent. ⇢
- Листинг 15.6. Программа создания цвета.
- В главе 10 мы уже применили такое переопределение в листинге 10.10 для вызова всплывающего меню.
- Вы можете создать собственное событие и определить источник и условия его возникновения.
- В листинге 15.7 приведен пример создания события MyEvent, любезно предоставленный Вячеславом Педаком.
- Событие MyEvent говорит о начале работы программы (start) и окончании ее работы.
- Листинг 15.7. Создание собственного события.
- Все, теперь при запуске программы делаем.
- а при окончании.
- При этом все зарегистрированные слушатели получат экземпляры событий.
- Оформление рамок. ⇢
- Листинг 16.1. Простые рамки.
- Закругленная объемная рамка SoftBevelBorder.
- Листинг 16.2. Рамки с изображениями и разной толщины I.
- Листинг 16.3 содержит программу, создавшую рис. 16.3. В ней приведены все описанные возможности создания рамок с надписями.
- Листинг 16.3. Рамки с надписями.
- Класс CompoundBorder создает рамку, состоящую из двух вложенных рамок любых типов. Это делается конструктором CompoundBorder(Border out, Border in) или статическим методом createCompoundBorder(Border out, Border in) класса BorderFactory.
- Число возможных комбинаций двух рамок очень велико. На рис. 16.4 показаны некоторые из них, а в листинге 16.4 приведена программа, создающая это окно.
- Листинг 16.4. Сдвоенные рамки.
- Листинг 16.5. Рамка с заголовком, содержащим компонент.
- Изменение. внешнего вида компонента. ⇢
- внешнего вида компонента. ⇢
- Листинг 17.1. Внутренние окна со стандартными L&F.
- В листинге 17.2 приведен пример программы, дающей возможность пользователю менять L&F во время работы приложения, выбрав нужный пункт меню. На рис. 17.2 показан вывод этой программы.
- Листинг 17.2. Смена L&F во время работы приложения.
- В листинге 17.3 приведена программа, в которой выполнены эти действия. Она позволяет заменить размер шрифта в текстовых полях другим размером, выбранным из меню.
- Листинг 17.3. Смена размера шрифта в полях ввода.
- На рис. 17.3 показан результат работы программы из листинга 17.3. В области ввода установлен шрифт величиной 20 пунктов. Поскольку две строчки листинга закомментированы, в поле ввода и в поле пароля остался прежний системный размер шрифта.
- Листинг 17.4. Окна, оформленные в "серой" теме.
- В стандартной поставке Java SE, в каталоге $JAVA_HOME/demo/jfc/MetalWorks/, лежат файлы приложения MetalWorks с примерами тем Java L&F. Запустить это приложение можно из командной строки, перейдя в этот каталог и набрав.
- Там же есть исходные тексты приложения, из которых видно, как создаются и используются темы Java L&F.
- Апплеты. ⇢
- Листинг 18.2. Файл HTML ДЛЯ загрузки апплета HelloWorld.
- Листинг 18.3. Бегущая строка в строке состояния браузера.
- Листинг 18.4. Файл RunningString.html.
- Листинг 18.5. Апплет, создающий окно.
- В листинге 18.8 показан переработанный апплет HelloWorld. В нем назначен белый фон, а шрифт устанавливается с параметрами, извлеченными из HTML-файла.
- Листинг 18.8. Апплет, принимающий параметры.
- На рис. 18.4 показан работающий апплет.
- Слежение за процессом загрузки.
- Листинг 18.9. Звук и изображение в апплете.
- Листинг 18.10. Шаблон апплета, использующего Swing.
- Прочие свойства Swing. ⇢
- Листинг 19.2. Перетаскивание текста из поля ввода в надпись.
- Листинг 19.3. Методы класса Timer.
- Изображения и звук. ⇢
- Классы-фильтры.
- Как выделить фрагмент изображения.
- В листинге 20.2 выделяется фрагмент изображения и выводится на экран в увеличенном виде. Кроме того, ниже выводятся изображения, увеличенные с помощью классов.
- Листинг 20.2. Примеры масштабирования изображения j.
- На рис. 20.3, слева сверху, показано исходное изображение, справа — увеличенный фрагмент, внизу — изображение, увеличенное двумя способами.
- Как изменить цвет изображения.
- Листинг 20.3. Изменение цвета всех пикселов.
- Как переставить пикселы изображения.
- Листинг 20.4. Циклический сдвиг изображения.
- Упражнения.
- Object.
- — LookupTable.
- -DataBufferByte.
- — Raster-WritableRaster.
- DirectColorModel.
- Преобразование изображения в Java 2D.
- Аффинное преобразование изображения.
- Листинг 20.5. Аффинное преобразование изображения.
- На рис. 20.6 показано исходное изображение, преобразованная область и преобразованное внутри области изображение.
- Изменение интенсивности изображения.
- Листинг 20.6. Изменение интенсивности изображения.
- Изменение составляющих цвета.
- Листинг 20.7. Изменение составляющих цвета.
- Упражнения.
- Улучшение изображения двойной буферизацией.
- Листинг 20.10. Двойная буферизация с помощью класса image.
- Листинг 20.12. Анимация рисованием.
- Эффект мерцания, переливы цвета, затемнение и прочие эффекты, получающиеся заменой отдельных пикселов изображения, удобно создавать с помощью класса.
- MemoryImageSource. Методы newPixels () этого класса вызывают немедленную перерисовку изображения даже без обращения к методу repaint (), если перед этим выполнен метод setAnimated (true). Чаще всего применяются два метода…
- □ newPixels (int x, int y, int width, int height) — получателю посылается указанный аргументами прямоугольный фрагмент изображения;
- □ newPixels () — получателю посылается все изображение.
- В листинге 20.13 показано применение этого способа. Квадрат, выведенный на экран, переливается разными цветами.
- Упражнения.
- Листинг 20.14. Простейшее аудиоприложение.
- Проигрывание звука в Java.
- Листинг 20.15. Проигрывание аудиоклипа.
- Как видите, методы Java Sound API выполняют элементарные действия, которые надо повторять из программы в программу. Как говорят, это методы "низкого уровня" (low level).
- Второй способ (использующий методы интерфейса SourceDataLine) требует предварительного создания буфера произвольного размера.
- Листинг 20.16. Проигрывание аудиофайла.
- Синтез и запись звука в Java.
- Листинг 20.18. Создание MIDI-последовательности нот звукоряда.
- Упражнение.
- ЧАСТЬ IV. Необходимые конструкции. ⇢
- Java. ⇢
- Обработка. исключительных ситуаций. ⇢
- Листинг 21.1. Программа без обработки исключений.
- Листинг 21.2. Программа с блоками обработки исключений.
- Листинг 21.3. Выбрасывание исключения из метода.
- Упражнения.
- исключительных ситуаций. ⇢
- Листинг 21.1. Программа без обработки исключений.
- Листинг 21.2. Программа с блоками обработки исключений.
- Листинг 21.3. Выбрасывание исключения из метода.
- Упражнения.
- Листинг 21.4. Обработка исключения в методе.
- Упражнение.
- Листинг 21.6. Обработка нескольких типов исключений с помощью перечисления.
- Подпроцессы. ⇢
- Листинг 22.1. Два подпроцесса, запущенные из главного подпроцесса.
- Листинг 22.2. Класс расширяет Thread !
- Листинг 22.3. Реализация интерфейса Runnable.
- Листинг 22.4. Прекращение работы подпроцессов.
- Листинг 22.5. Синхронизация метода.
- Листинг 22.6. Несогласованные подпроцессы.
- Листинг 22.7. Согласование получения и выдачи информации.
- Листинг 22.8. Согласование стандартным классом SynchronousQueue.
- Потоки ввода/вывода и печать. ⇢
- Классы, входящие в иерархии потоков ввода/вывода, показаны на рис. 23.1 и 23.2.
- Все классы пакета j ava. io можно разделить на две группы: классы, создающие поток (data sink), и классы, управляющие потоком (data processing).
- Классы, создающие потоки, в свою очередь, можно разделить на пять групп…
- □ классы, создающие потоки, связанные с файлами…
- □ классы, создающие потоки, связанные с массивами…
- □ классы, создающие каналы обмена информацией между подпроцессами…
- □ классы, создающие символьные потоки, связанные со строкой…
- □ классы, создающие байтовые потоки из объектов Java…
- Слева перечислены классы символьных потоков, справа — классы байтовых потоков.
- Листинг 23.1. Консольный ввод/вывод.
- Форматированный вывод.
- Упражнения.
- Получение свойств файла.
- Работа с файлом средствами NIO2.
- Каналы буферизованного ввода/вывода.
- Листинг 23.4. Работа с файлом методами N102.
- Упражнения.
- Кодировка UTF-8.
- Листинг 23.5. Ввод/вывод данных.
- Упражнение.
- Листинг 23.6. Канал обмена информацией.
- Нужно только соблюдать порядок чтения элементов потока.
- В листинге 23.7 мы создаем объект класса GregorianCalendar с текущей датой и временем, сериализуем его в файл date.ser, через три секунды десериализуем обратно и сравниваем с текущим временем. Результат показан на рис. 23.7.
- Листинг 23.7. Сериализация объекта.
- Листинг 23.9. Простая печать методами Java 2D.
- Печать файла.
- Листинг 23.10. Печать текстового файла.
- Печать страниц с разными параметрами.
- Листинг 23.11. Печать страниц с разными параметрами.
- Сетевые средства Java. ⇢
- Листинг 24.1. Получение Web-страницы.
- Листинг 24.2. Посылка строки по адресу URL.
- Упражнения.
- 5. Клиент выводит содержимое полученного файла в стандартный вывод System.out или выводит код сообщения сервера в стандартный вывод сообщений System.err.
- 6. Клиент закрывает сокет, завершая связь.
- Этот протокол реализуется в клиентской программе листинга 24.3 и серверной программе листинга 24.4.
- Листинг 24.3. Упрощенный НТТР-клиент.
- Листинг 24.4. Упрощенный НТТР-сервер.
- Работа с proxy-сервером.
- Упражнения.
- Упражнение.
- ЧАСТЬ V Web-технологии Java. ⇢
- Web-инструменты Java. ⇢
- Создание архива.
- Файл описания MANIFEST.MF.
- Файл INDEX.LIST.
- Листинг 25.1. Апплет, обращающийся к базе Oracle.
- Таким образом, JDBC позволяет проделать весь цикл работы с базой данных. Подробно со всеми возможностями JDBC можно познакомиться, прочитав спецификацию JDBC, имеющуюся по адресу: http://java.sun.com/products/jdbc/.
- В документации Java SE, в каталоге technotes/guides/jdbc/, есть ссылки на пособия по использованию JDBC.
- Сервлеты. ⇢
- InfoAppI.
- —WEB-INF-г.
- web.xml.
- myservlets.
- sdotags—
- InfoServlet.class.
- HeadTag.class QueryTag.class.
- Конфигурационный файл.
- Листинг 26.1. Конфигурационный файл web.xml.
- Листинг 26.2. Начальные параметры сервлета.
- Контекст сервлета.
- Цикл работы сервлета.
- Класс GenericServlet. ⇢
- Аннотации сервлета.
- Пример сервлета класса HttpServlet.
- Листинг 26.4. Форма регистрации клиента СДО.
- Листинг 26.5. Сервлет регистрации клиента СДО.
- Кстати говоря, некоторые контейнеры сервлетов не воспринимают кодировку, если оставлены пробелы между точкой с запятой и словом "charset".
- Листинг 26.7. Фильтр определения кодировки параметров запроса.
- Асинхронную работу естественно выполнять в отдельном подпроцессе.
- В листинге 26.8 приведен типичный пример асинхронного сервлета. Обратиться к нему можно примерно так…
- После набора этого адреса в адресной строке браузера, подождите 10 секунд, и вы увидите ответ сервлета.
- Листинг 26.8. Асинхронный сервлет.
- Страницы JSP. ⇢
- Листинг 27.1. Простейшая страница JSP.
- Листинг 27.2. Простейшая страница JSP в форме XML.
- exception. У этих объектов заданы определенные имена и типы. В большинстве случаев заданы не точные типы объектов, а их суперклассы и интерфейсы…
- □ out — выходной поток типа JspWriter;
- □ page — произвольный объект класса Object;
- □ exception — исключение класса Throwable.
- В листинге 27.3 приведена страница JSP, использующая скриптлеты и встроенные объекты для организации запроса к базе СДО, описанной в предыдущей главе.
- Из страницы JSP можно обращаться к объектам Java, оформленным как компоненты JavaBeans. Это выполняется тегом.
- "Имя экземпляра компонента" id определяет имя JavaBean, уникальное в заданной атрибутом scope области. По умолчанию принимается область page — текущая страница JSP и включенные в нее страницы.
- Компонент хранится как атрибут контекста указанной атрибутом scope области и вызывается методом getAttribute () соответствующего контекста.
- Выполнение апплета в браузере клиента.
- Передача управления.
- Класс-обработчик пользовательского тега.
- Пользовательский тег с атрибутами.
- Листинг 27.6. Пользовательский тег с атрибутом.
- Пользовательский тег с телом.
- Этот тег реализован классом HeadTag, описанным в листинге 27.7.
- Листинг 27.7. Пользовательский тег с простым телом.
- После этого на странице JSP можно писать пользовательский тег.
- Текст, написанный в его теле, будет выведен у клиента шрифтом указанного размера.
- Обработка тела пользовательского тега.
- содержит в своем теле SQL-запросы, например…
- В листинге 27.8 приведен фрагмент обработчика этого тега.
- Обработка взаимодействующих тегов.
- Листинг 27.9. Реализация тега соединения с базой данных.
- Листинг 27.10. Реализация связанного тега.
- Обработка исключений в пользовательских тегах.
- Библиотека core.
- Листинг 27.11. Ответ, сформированный с помощью JSTL.
- Библиотека xml.
- Библиотека fmt.
- Библиотека sql.
- Библиотека fn.
- Листинг 27.12. Страница JSP с тегами библиотеки JSF.
- Листинг 27.13. Класс с данными HTML-формы j.
- Листинг 27.14. Конфигурационный файл JSF.
- Листинг 27.15. Страница приветствия с тегами библиотеки JSF.
- Связь Java с технологией XML. ⇢
- Листинг 28.1. Пример XML-документа.
- list>. Заметьте, что элемент <name> с атрибутами пустой, у него нет тела, следовательно, не нужен закрывающий тег. Поэтому тег <name> с атрибутами завершается символами "/>". В листинге 28.2 приведена измененная адресная книжка.
- Листинг 28.2. Пример XML-документа с атрибутами в открывающем теге.
- Атрибуты открывающего тега удобны и для указания типа элемента. Например, мы не уточняем, в городе живет наш родственник, в поселке или в деревне. Можно ввести в тег <city> атрибут type, принимающий одно из значений: город, поселок, деревня. Например…
- Встроенные простые типы XSD.
- Определение простых типов.
- Описание элементов и их атрибутов.
- Определение сложных типов.
- Пример: схема адресной книги.
- Безымянные типы.
- Пространства имен языка XSD.
- Листинг 28.6. Схема документа XML с целевым пространством имен.
- Поскольку в листинге 28.6 пространством имен по умолчанию сделано пространство.
- Следует заметить, что в целевое пространство имен попадают только глобальные имена, чьи описания непосредственно вложены в элемент <schema>. Это естественно, потому что лишь глобальными именами можно воспользоваться далее в этой или другой схеме. В листинге 28.6 только одно глобальное имя — <notebook>. Вложенные имена name, address и другие всего-навсего ассоциированы с глобальными именами.
- Включение файлов схемы в другую схему.
- Связь документа XML со своей схемой.
- Другие языки описания схем.
- Листинг 28.7. Класс, описывающий адрес.
- Листинг 28.8. Класс, описывающий запись адресной книжки.
- Листинг 28.9. Кпасс-обработник документа XML средствами SAX2.
- Листинг 28.10. Класс-обработчик документа XML средствами StAX.
- Интерфейс Node.
- Интерфейс Document.
- Интерфейс Element.
- Удалить атрибут можно методами.
- Установить значение атрибута можно методами.
- Добавить атрибут в качестве потомка можно методами.
- Два метода позволяют получить список узлов-потомков…
- Итак, методы перечисленных интерфейсов позволяют перемещаться по дереву, менять структуру дерева, просматривать информацию, хранящуюся в узлах и листьях дерева, и изменять ее.
- Приведем пример работы с деревом объектов, построенным по документу XML. Добавим в адресную книжку листинга 28.2 новый рабочий или домашний телефон Сидоровой. Это действие записано в листинге 28.11.
- Листинг 28.11. Анализ адресной книжки с помощью DOM API.
- Другие DOM-парсеры.
- Листинг 28.12. Простейшая таблица стилей XSL.
- Листинг 28.13. Консольная программа преобразования документа XML.
- После компиляции набираем в командной строке.
- и получаем на экране дисплея содержимое тегов документа ntb.xml.
- В более сложных случаях просто изменяем таблицу стилей. Например, если мы хотим получить содержимое документа на консоли, то таблицу стилей для объекта-преобразователя класса Transformer надо записать так, как показано в листинге 28.14.
- Листинг 28.14. Таблица стилей для показа адресной книжки.
- Листинг 28.15. Таблица стилей для преобразования XML в HTML.
- Эту таблицу стилей можно записать в файл, например, ntb.xsl, и сослаться на него в документе XML, описывающем адресную книжку…
- После этого любой браузер, "понимающий" XML и XSLT, например Mozilla Firefox или Internet Explorer, покажет содержимое адресной книжки, как предписано листингом 28.15.
- Если набрать в командной строке.
- то в текущем каталоге будет записан преобразованный HTML-файл с именем ntb.html.
- Список литературы. ⇢
- Предметный указатель. ⇢
И. Ш. Хабибуллин.