Swing — первое знакомство
Swing — библиотека Java для построения оконного графического интерфейса (GUI): окна, кнопки, поля ввода, списки и таблицы.
Swing входит в набор Java Foundation Classes (JFC), надстроен над более старым пакетом AWT и рисует свои компоненты сам, поэтому одинаково выглядит на Windows, macOS и Linux.
Содержание урока
- 1 Swing или AWT: что выбрать
- 2 Каркас Swing-приложения
- 3 Менеджеры компоновки
- 4 Список JList: модель, выбор, слушатель
- 5 Выпадающий список JComboBox
- 6 Почему весь код в invokeLater
- 7 Если окно ведёт себя не так
- 8 Выводы и что учить дальше
Swing или AWT: что выбрать
AWT (Abstract Window Toolkit) — первый оконный пакет Java. Его компоненты — это обёртки над «родными» элементами операционной системы (их называют тяжеловесными).
Swing свои компоненты рисует сам средствами Java (легковесные), поэтому даёт единый вид на всех платформах и намного больше готовых элементов.
| Признак | AWT | Swing |
|---|---|---|
| Отрисовка компонентов | системные (native) элементы | рисуются самой Java |
| Зависимость от платформы | внешний вид зависит от ОС | одинаковый вид везде |
| Набор компонентов | базовый | широкий (таблицы, деревья, списки) |
| Архитектура модель-представление | нет | есть (модель отделена от вида) |
| Подключаемый вид (look and feel) | нет | есть |
AWT vs Swing: практический вывод
На практике новый оконный код на чистом AWT почти не пишут: берут Swing, а из AWT используют только базовые классы, на которых Swing построен — Container, менеджеры компоновки, классы событий.
Важно про современный Java
- Swing по-прежнему поставляется в составе JDK и поддерживается.
- Новые крупные интерфейсы часто делают на JavaFX или на вебе.
- Апплеты (JApplet, Applet) — мёртвая ветка. Applet API объявлен устаревшим и намечен к удалению в JDK 17 (JEP 398). Браузеры давно не запускают апплеты.
Каркас Swing-приложения
Любое окно Swing собирается из нескольких обязательных частей:
- JFrame — главное окно приложения с рамкой и заголовком (это контейнер верхнего уровня).
- Панель содержимого (content pane) — область внутри окна, куда добавляют компоненты.
- Менеджер компоновки (layout manager) — решает, как расположить компоненты внутри контейнера.
Минимальное окно Swing
Полный пример — окно с одной надписью:
Две критичные строки
Для новичка важны две строки в примере:
frame.setVisible(true)— показывает окно. Без неё программа завершится, ничего не показав.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)— завершает приложение при закрытии окна. Иначе процесс останется висеть в памяти.
SwingUtilities.invokeLater поговорим отдельно на слайде 18 — это правило потока, а не украшение.
Менеджеры компоновки
Swing почти никогда не расставляет компоненты по пикселям вручную — за раскладку отвечает менеджер компоновки. Основные из них:
| Менеджер | Как располагает |
|---|---|
| FlowLayout | по строке слева направо, с переносом |
| BorderLayout | пять зон: центр и четыре стороны (север, юг, запад, восток) |
| GridLayout | равные ячейки таблицы |
| BoxLayout | в один ряд по вертикали или горизонтали |
| GridBagLayout | гибкая сетка с разными размерами ячеек |
JFrame по умолчанию стоит BorderLayout. Поэтому в примере со списком мы положим список в центр, а строку статуса — на юг.