Download - SWING
![Page 1: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/1.jpg)
SWING
![Page 2: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/2.jpg)
Графические библиотекиAWT – , платформозависимая java.awt.*Swing – , платформонезависимая
java.swing.*SWT – платформозависимая
![Page 3: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/3.jpg)
Окна верхнего уровня Окно приложения
Класс JFrame Диалоговое окно
Класс JDialog Окно апплета
Класс JApplet Вложенное окно
Класс JInternalFrame
![Page 4: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/4.jpg)
DemotestFrame.javatestFrame2.java
![Page 5: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/5.jpg)
Окна приложения Класс JFrameКонструкторы
JFrame(title)Свойства
title – заголовокjMenuBar – менюiconImage – иконка окна
![Page 6: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/6.jpg)
Закрытие окнаМетод
setDefaultCloseOperation(operation) – установить действие при закрытии окна
DO_NOTHING_ON_CLOSEHIDE_ON_CLOSE DISPOSE_ON_CLOSE EXIT_ON_CLOSE (JFrame)
![Page 7: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/7.jpg)
Стандартные диалоги Класс JOptionPaneМетоды
showConfirmDialog(…) – / /да нет отменаshowInputDialog(…) – ввод текстаshowMessageDialog(…) – информацияshowOptionDialog(…) – выбор из списка
ПараметрыparentComponent – родительскаякомпонента
message – сообщениеoptionType – набор кнопокmessageType – вид иконки
![Page 8: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/8.jpg)
Панель содержимогоМетоды
getXXXPane() – возвращает панельsetXXXPane() – устанавливает панель
getContentPane(), setContentPane()
![Page 9: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/9.jpg)
DemotestFrameButton
![Page 10: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/10.jpg)
Компоненты , Части интерфейса пользователя не
содержащие других компонентовJLabel – меткаJButton – кнопкаJMenuItem – элемент менюJTextArea – редактор текста
![Page 11: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/11.jpg)
Контейнеры , Части интерфейса пользователя содержащие другие
компонентыJPanel – панельJFrame – окно приложенияJDialog – диалоговое окноJSrollPane – область с полосой прокрутки
add(Component component) — добавляет в контейнер элемент component;
remove(Component component) — удаляет из контейнера элемент component;
removeAll() — ;удаляет все элементы контейнераgetComponentCount() — возвращает число
.элементов контейнера
![Page 12: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/12.jpg)
Возможности компонентов Генерация событий Обработка ввода пользователяРамки Отрисовка “ в ручную” ПоддержкаDrag & DropКомпановка…
![Page 13: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/13.jpg)
Тяжело- и легковесные компоненты (Тяжеловесные heavyweight) компоненты Отрисовываются операционной системой Большинство AWT-компонент
(Легковесные ligntweight) компоненты Отрисовываются java-кодом Все Swing- , компоненты кроме окон
верхнего уровня Тяжеловесные компоненты всегда
отрисовываются поверх легковесных
![Page 14: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/14.jpg)
Компоновка
![Page 15: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/15.jpg)
Компоновщики Размещают компоненты внутриконтейнера
Интерфейс java.awt.LayoutManager
panel.setLayout(new FlowLayout());
![Page 16: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/16.jpg)
Работа компоновщика , Разместить компоненты так что бы
удовлетворялись рекомендации Рекомендации по размеру
Dimension minimumSize – минимальныйDimension preferredSize – наилучшийDimension maximumSize -- максимальный
![Page 17: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/17.jpg)
FlowLayout Компоненты выкладываются одна за
, другой с переносом строкСвойства
alignment – выравниваниеLEADING, CENTER, TRAILING
vgap / hgap – / расстояние по горизонталивертикали
![Page 18: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/18.jpg)
BorderLayout Компоненты располагаются по краямСвойства
vgap / hgap – расстояние по вертикали / горизонтали
![Page 19: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/19.jpg)
GridLayout Компоненты располагаются в видетаблицы
Свойстваrows / columns – / количество строкстолбцов
vgap / hgap – расстояние повертикали / горизонтали
![Page 20: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/20.jpg)
BoxLayout Выкладывает компоненты горизонтально
/ вертикальноBox.createHorizontalBox()Box.createVerticalBox()
Box box = Box.createVerticalBox();box.add(new JButton(" "));Кнопкаbox.add(Box.createVerticalStrut(10));box.add(Box.createVerticalGlue());
![Page 21: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/21.jpg)
Другие компоновщикиCardLayout – помещает компоненты друг
за другомGridBagLayout – помещает компоненты в
гибкую таблицуSpringLayout – очень гибкий
, компоновщик используется прикодогенерации
![Page 22: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/22.jpg)
Запуск компоновщика – Автоматически при изменении размераконтейнера
В ручнуюinvalidate() – запросить перекомпоновку
компоненты и всех ее предковrevalidate() – thead-safe invalidate()
![Page 23: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/23.jpg)
DemotestFramePanel.java
![Page 24: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/24.jpg)
Обрамление
![Page 25: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/25.jpg)
Обрамление Каждая компонента может иметь
обрамление в виде рамки Пакет javax.swing.border Класс BorderМетод
Component.setBorder(Border)
![Page 26: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/26.jpg)
Размер обрамления Размер обрамления вычитается из
размера компоненты Класс Insets Конструктор Insets(left, right, bottom, top)Поля
left – отступ слеваright – отступ справаbottom – отступ снизуtop – отступ сверху
![Page 27: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/27.jpg)
Типы обрамлений (простые)Классы
EmptyBorder – пустоеместо
LineBorder – линияEtchedBorder – объемность
BevelBorder – / выпуклость
вдавленностьMatteBorder -
Обрамление“набирается” из рисунка
![Page 28: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/28.jpg)
Типы обрамлений (составные)TitledBorder – . обрамление с заголовком
Создается на основе другого обрамленияCompoundBorder – объединяет дваобрамленияCompoundBorder(insideBorder,
outsideBorder)
![Page 29: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/29.jpg)
Компоненты
![Page 30: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/30.jpg)
Класс JPanel Простейший контейнерКонструктор
JPanel(LayoutManager)Свойства
layoutManager -- компановщик
![Page 31: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/31.jpg)
Класс JLabelJLabel - Метка с текстомКонструктор
JLabel(text?, icon?)Свойства
text – надпись на меткеicon – картинка
Demo: testFrameComponents.java
![Page 32: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/32.jpg)
JButton - кнопкаJButton(String text?, Icon icon?)setRolloverIcon(Icon icon)setPressedIcon(Icon icon)setMargin(Insets margin)
![Page 33: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/33.jpg)
JToggleButton, JCheckBox, JRadioButtonJToggleButton - , кнопка которая может
: находиться в двух состояниях нажатом иотпущенном
JCheckBox, JRadioButton – наследники
ButtonGroup – взаимоисключающийконтейнер
Demo: SimpleWindowTogglesAsk to change
![Page 34: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/34.jpg)
Визуальные компонентыJTextField
setText(String text)getText(int offset, int length)
JPasswordFieldset(get)EchoChar(char echo)
JTextAreaappend(String text)insert(String text, int position)
![Page 35: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/35.jpg)
Панель прокрутки JScrollPane Панель с полосами прокруткиКонструктор
JScrollPane(Component?, vsbPolicy?, hsbPolicy?)<dir>_SCROLLBAR_AS_NEEDED <dir>_SCROLLBAR_NEVER<dir>_SCROLLBAR_ALWAYS
getContentPane().add(new JScrollPane(textArea));
![Page 36: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/36.jpg)
Иконки Класс ImageIconКонструктор
ImageIcon(url) – загрузить по URLImageIcon(file) – загрузить из файла
МетодыgetIconHeight() – высота иконкиgetIconWidth() – ширина иконкиgetImage() – платформозависимый рисунок
Применениеframe.setIconImage(icon.getImage())new JLable(icon);
![Page 37: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/37.jpg)
Визуальные компонентыJToolBarJComboBoxJSliderJTabbedPaneJListJProgressBar
![Page 38: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/38.jpg)
Обработка событий
![Page 39: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/39.jpg)
Классификация событий Низкоуровневые события
Создаются системой на основе действийпользователя
– Инициатор события текущая компонента Высокоуровневые события
Создаются компонентами на основе другихсобытий
– Инициатор события компонента создавшая событие
![Page 40: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/40.jpg)
Низкоуровневые события Ввод пользователя
InputEvent – базовый классKeyEvent – событие клавиатурыMouseEvent – событие мышиMouseWheelEvent – событие колесапрокрутки
Изменение состояния компонентыComponentEvent – / изменение видимости
/ размера местоположения компонентаFocusEvent – изменение фокусаContainerEvent – / добавление удалениекомпонент
WindowEvent – операции с окнами
![Page 41: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/41.jpg)
Обработка низкоуровневых событий Генерация событий
– Клавиатурные для компоненты владеющей фокусом
– , Мыши для компоненты над которой находится мышь
– Прочие для компоненты с которой произошли
Событие ввода может бытьпоглощено Метод consume()
![Page 42: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/42.jpg)
Высокоуровневые событияПримеры
ActionEvent – нажатие на кнопкуMenuEvent – операции с менюPopupMenuEvent – операции с
всплывающимменю…
![Page 43: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/43.jpg)
Слушатели Оповещаются о возникновении события Интерфейсы XXXListener Управление слушателями
Метод addXXXListener(XXXListener listener) – добавить слушателя
Метод removeXXXListener(XXXListener listener) – убрать слушателя
![Page 44: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/44.jpg)
Создание слушателя Реализация слушателя
1. Реализовать интерфейс2. Добавить слушателя к компоненту3. Реагировать на события
Вспомогательные классы XXXAdapter – для реализации слушателей
с несколькимиметодами
![Page 45: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/45.jpg)
MouseListener Слушатель событий от мыши должен
реализовать интерфейсMouseListener. В этом :интерфейсе перечислены следующиеметоды
mouseClicked(MouseEvent event) — выполнен щелчок мышкой на наблюдаемом объекте
mouseEntered(MouseEvent event) — курсор мыши вошел в область наблюдаемого объекта
mouseExited(MouseEvent event) — курсор мыши вышел из области наблюдаемого объекта
mousePressed(MouseEvent event) — кнопка мыши , нажата в момент когда курсор находится над
наблюдаемым объектомmouseReleased(MouseEvent event) — кнопка
, мыши отпущена в момент когда курсор находится над наблюдаемым объектом
![Page 46: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/46.jpg)
DemomouseListener
![Page 47: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/47.jpg)
СлушателиFocusListenerMouseWheelListenerKeyListenerChangeListenerWindowListenerСomponentListener – , смена положения
…размераActionListener – универсальныйслушательactionPerformed(ActionEvent event)
DEMO
![Page 48: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/48.jpg)
ActionListener Событие ActionEvent
СвойстваgetActionCommand() – название командыgetModifiers() – -состояние клавиш модификаторовgetWhen() – когда произошло
Слушатель ActionListener Метод actionPerformed(ActionEvent e)
![Page 49: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/49.jpg)
Действия – Действие абстракция действия которое
можно произвести Интерфейс ActionМетоды
actionPerformed(ActionEvent) – совершитьдействие
setEnabled(boolean) – / запретить разрешитьisEnabled() – проверить разрешениеputValue(key, value) – записать значениесвойства
getValue(key) – прочитать значение свойства
![Page 50: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/50.jpg)
Свойства действий Константы интерфейса Action
NAME – название действияSHORT_DESCRIPTION – описание для
всплывающих подсказокLONG_DESCRIPTION – описание для
контекстной помощиACTION_COMMAND_KEY – имя командыSMALL_ICON – иконка
DEMO
![Page 51: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/51.jpg)
Меню
![Page 52: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/52.jpg)
Меню Основное меню
Класс JMenuBar Раскрывающееся меню
Класс JMenu Элементы меню
Класс JMenuItem – простой Класс JCheckBoxMenuItem – помечаемый Класс JRadioButtonMenuItem – один из Класс JSeparator – разделитель
DEMO
![Page 53: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/53.jpg)
Swing и потоки
![Page 54: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/54.jpg)
Swing и потоки Обработка сообщений и перерисовка
интерфейса пользователя происходят в (потоке событий EventThread)
Если занять EventThread, GUI “зависнет” С видимыми компонентами можно
оперировать только в EventThreadGUI рекомендуется создавать в
EventThread
![Page 55: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/55.jpg)
Видимые компоненты , Компонента считается видимой если
Она добавлена к видимому контейнеру Окна считаются видимой
После вызова метода pack() После вызова setVisible(true)
![Page 56: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/56.jpg)
Исполнение действий в EventThread Класс SwingUtilities Методы
invokeLater(Runnable) – выполнить методrun() в EventThread
invokeAndWait(Runnable) – выполнить методrun() в EventThread и дождаться окончания
DEMO
![Page 57: SWING](https://reader031.vdokumen.net/reader031/viewer/2022013012/5681554f550346895dc31bd3/html5/thumbnails/57.jpg)
class Task extends Thread { public void run() { for (int i = 0; i <= 100; i++) { final int percent = i; try { SwingUtilities.invokeLater(new Runnable() { public void run() {SimpleWindowProgress.pBar.setValue(percent);} }); // !!!НЕДЕЛАЙТЕ ТАК SimpleWindowProgress.pBar.setValue(percent); Thread.sleep(100); } catch (InterruptedException e) {…} } }}