- •Краткая историческая справка.
- •Преимущества языка Java.
- •Недостатки java:
- •Лекция 2. Этапы разработки java-приложений. Этапы разработки java-приложений.
- •Установка jdk.
- •Инсталляция исходных кодов библиотек
- •Инсталляция пакета документации.
- •Тестирование правильности установки и создание простейшей программы
- •Визуальные среды программирования.
- •Лекция 3. Переменные и типы данных. Переменные и типы данных.
- •Подробности о примитивных типах.
- •Лекция 4. Операторы и функции. Операторы и функции.
- •Операторы ветвлений и циклов.
- •Оператор цикла while.
- •Оператор цикла for.
- •Лекция 5. Объектно ориентированное программирование Объектно ориентированное программирование.
- •Определение объекта.
- •Инкапсуляция.
- •Наследование.
- •Полиморфизм (перегрузка).
- •Пример ооп – программы.
- •Отличие перегрузки функций от переопределения.
- •Отличие классов от интерфейсов.
- •Лекция 6. Массивы и строки. Массивы и строки.
- •Многомерные массивы.
- •Приведение типов и динамические массивы.
- •Строки в java.
- •Лекция 7. Организация ввода-вывода данных Организация ввода-вывода данных.
- •Функции стандартной библиотеки ввода/вывода.
- •Новая библиотека ввода/вывода.
- •Классы потокового ввода/вывода из пакета java.Io.
- •Лекция 8. Обработка исключений. Обработка исключений.
- •Классификация исключений.
- •Перехват исключений блоками try/catch.
- •Самостоятельное выбрасывание исключений.
- •Разработка собственных классов исключений.
- •Лекция 9. Потоки. Потоки.
- •1. Cпециальный класс Thread.
- •2. Реализация интерфейса Runnable.
- •Выбор между использованием класса Thread и интерфейса Runnable.
- •Синхронизация потоков с помощью оператора synchronized.
- •Синхронизация потоков с помощью семафоров.
- •Лекция 10. Подключаемые библиотеки java. Подключаемые библиотеки java.
- •Библиотека awt
- •Внутреннее устройство системы обработки событий awt.
- •Библиотека Swing.
Библиотека Swing.
Состоит из "легких" компонентов, во многом полностью соответствующим компонентам AWT. Для её применения достаточно, чтобы в системе был установлен пакет Java Runtime Envirioment (JRE). На данный момент содержит более 500 классов и интерфейсов, предоставляющих программистам все необходимые и все мыслимые возможности.
Однако для построения стандартного интерфейса вполне достаточно классов, расположенных в пакете javax.swing.
Почти все классы Swing начинаются с заглавной буквы J (JFrame, JTable, Jmenu…).
Например:
JInternalFrame - Окно, размещаемое внутри другого окна, к примеру, JFrame
JProgressBar - Автоматический ползунок, отображающий % выполнения чего – либо.
JSlider - Ползунок для выбора какой – либо величины с помощью мыши
JTable - Компонент для вывода данных в виде таблицы
JTree - Компонент для вывода данных в виде иерархического списка
Как видно из схемы на рис.1, большинство базовых классов Swing наследуются от класса Container. Несмотря на то, что в библиотеке Swing много классов, наследуемых от различных уровней иерархии, вплоть до базового класса Object, именно класс Container можно считать базовым для большинства базовых классов Swing. Это позволяет программистам, хорошо знакомым с AWT совершенно прозрачно перейти на Swing.
Более того, классы этих библиотек настолько хорошо совместимы, что можно импортировать и использовать обе эти библиотеки в одном приложении. Классы Swing имеют аналогичные названия и полный набор аналогичных AWT методов, что позволяет программистам использовать Swing таким же точно образом, как и AWT и не переучиваться. Однако в совместном использовании этих двух библиотек есть небольшой, но очень существенный нюанс. Как вы помните, компоненты AWT являются "тяжеловесными" и зависят от конкретного способа отрисовки окон операционной системой. Это означает, что ОС может напрямую с ними взаимодействовать. И когда ОС передает всем окнам команду на перерисовку, этой команде подчиняются так же и окна, созданные на основе AWT. В противоположность им, компоненты Swing являются "легковесными". Это означает, что они находятся только в пространстве окна приложения java, который для них является контейнером верхнего уровня, и не взаимодействуют с ОС напрямую. Поэтому когда ОС дает команду на общее обновление окон, перерисовывается так же и контейнер верхнего уровня, но это не значит, что "легковесные" компоненты Swing автоматически перерисовываются вместе с ним. Следствием этого является то, что каким бы способом мы не размещали "легковесные" компоненты поверх "тяжеловесных", они постоянно оказываются выше и прекрывают компоненты Swing. В этом нет никакой проблемы, если используются только статичные компоненты вроде кнопок, флажков и текстовых полей ввода, однако проблема "встает во весь рост" при попытке совместного использования компонентов AWT и компонентов Swing, которые могут изменяться на форме, к примеру, выпадающих списков, дочерних окон, всплывающих подсказок и т.д.
Представьте, что у вас на форме остаются "следы" от выпадающего списка или часть формы перерисовывается, а часть – нет.
Поскольку отледить эти взаимодействия элементов управления бывает затруднительно, совместное использование Swing и AWT из практических соображений не рекомендуется.
Второе значительное отличие компонентов Swing от компонентов AWT заключается в том, что компоненты Swing построены на основе паттерна MVC. Этот паттерн проектирования предполагает, что функции получения и обработки данных, управления отображением компонентов и непосредственно сама отрисовка разнесены по различным функциональным модулям, как показано на рисунке:
Контроллер является звеном, непосредственно взаимодействующим с пользователем. Это то, что составляет UI – пользовательский интерфейс. Контроллер, реагируя на события, обращается к методам Модели, обычно это сеттеры (функции типа setЧто-либо). Объекты Модели меняют хранящуюся в них информацию и сообщают об этом видам, которые зарегестрированы в Модели. Этот способ взаимодействия называется подписка – рассылка.
Виды подписываются у Моделей и те рассылают им сообщения о всяком изменении состояния объекта через вызовы функций fireXx(). После этого Виды забирают измененную информацию, обращаясь к методам getЧто-то() и isЧто-то() Модели.
В библиотеке Swing Модели соответствуют интерфейсам, в которых присутствуют необходимые методы. Каждый интерфейс имеет хотя бы одну стандартную реализацию.
Таким образом Контроллер связан с нажатием кнопок, перетаскиванием ползунков на форме и вводом текста в поля ввода, а Вид меняет внешнее отображение этих графических компонент на форме, получив от Модели сообщение о произошедших изменениях.
Вся эта машинерия упакована внутрь реализации библиотеки совершенно прозрачно для программиста, поэтому обычно программисту не приходится беспокоиться о взаимодействии отдельных компонентов MVC или пытаться что-то с ней делать.
Однако реализация паттерна MVC в библиотеке Swing предполагает, что если программиста по каким – то причинам не удовлетворяет стандартная реализация отдельных компонентов, то он может, например, получить экземпляр модели с помощью вызова метода getModel() из класса компонента и попытаться что –либо с ним сделать. Заменить например реализацию на свою. Например, в каждом объекте Jbutton хранится объект модели, который можно оттуда получить:
Jbutton button = new Jbutton("OK");
ButtonModel model = button.getModel();
Обычно модели кнопок хранят сведения о состоянии – нажата кнопка, отпущена, или заблокирована. Но в соответствии с парадигмой MVC в них не хранится информация об их внешнем виде, например, в ней не хранится название кнопки и её пиктограмма.
Внешний вид кнопок хранится в полях самого класса.
Пример простого шаблона приложения, использующего Swing:
import java.awt.*;
import.javax.swing.*;
public class SwingApp extends Jframe {
public SwingApp (String name_programm) {
Super(name_programm); // вызываем суперкласс для создания родительского окна
Container с = getContentPane(); // создаем экземпляр контейнера
c.add(какой-либо_компонент); // можно без контейнера, просто this.add(xxx);
setSize(длина, высота);
setDefaultCloseOperation(EXIT_ON_CLOSE); // обработка кнопки закрытия окна
setVisible(true); // выводим окно на экран }
public static void main(String[] args) {
new SwingApp("Имя_программы");
}
}
